标签:while cli eve open 一个 amp turn using getch
不是啊。。不是说双栈嘛,,怎么是个**题啊。
链接:
1 #include <bits/stdc++.h> 2 using namespace std; 3 inline int read() { 4 int X=0,w=1; char c=getchar(); 5 while (c<‘0‘||c>‘9‘) { if (c==‘-‘) w=-1; c=getchar(); } 6 while (c>=‘0‘&&c<=‘9‘) X=(X<<3)+(X<<1)+c-‘0‘,c=getchar(); 7 return X*w; 8 } 9 typedef long long ll; 10 ll pre[1000005],las[1000005]; 11 int n,p,c[1000005],q,a[1000005],b[1000005],ans[1000005]; 12 int main(){ 13 n=read();p=read(); 14 for(int i=1;i<=n;i++)c[i]=read(); 15 q=read(); 16 for(int i=1;i<=q;i++)a[i]=read(),b[i]=read(); 17 for(int l=1,r;l<=q;l=r+1){ 18 r=l; 19 while (a[r]<=b[l]&&r<=q)r++; 20 r--; 21 //[l,r]是分成一段 22 pre[0] = c[b[l]]; 23 for(int i=1;b[l]-i>=a[l];i++){//左边 24 pre[i] = pre[i-1]*c[b[l]-i]%p; 25 } 26 las[0]=1; 27 for(int i=1;b[l]+i<=b[r];i++){//右边 28 las[i]=las[i-1]*c[b[l]+i]%p; 29 } 30 for(int i=l;i<=r;i++){//统计答案 31 ans[i]=pre[b[l]-a[i]]*las[b[i]-b[l]]%p; 32 } 33 } 34 for(int i=1;i<=q;i++){ 35 printf("%d\n",ans[i]); 36 } 37 }
标签:while cli eve open 一个 amp turn using getch
原文地址:https://www.cnblogs.com/MXang/p/10568887.html