Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98069 | liuyuyang | 早凉的程序2 | C++ | 运行超时 | 10 | 4000 MS | 11964 KB | 1542 | 2023-08-14 11:58:20 |
#include<bits/stdc++.h> using namespace std; int a[1000006],n,m,p,k; long long ans=0; long long q[1000006]; bool f=true,t=true,ff=true,tt=true; int main() { scanf("%d%d%d",&n,&m,&p); for(int i=1; i<=n; ++i){ scanf("%d",&a[i]); q[i]=q[i-1]+a[i]; if(a[i]>=p) f=false; if(a[i]<p) t=false; if(a[i-1]<a[i]) ff=false; if(a[i-1]>a[i]) tt=false; } if(f){ for(int i=1;i<=m;++i){ int l,r; cin >> l >> r; ans=(q[r]-q[l-1])%p; cout << ans << endl; } return 0; }else if(t){ for(int i=1;i<=m;++i){ int l,r; cin >> l >> r; ans=q[r]-q[l-1]-p*(r-l+1); cout << ans << endl; } return 0; }else if(ff){ int l=1,r=n; while(l<=r){ int mid=(r+l)/2; if(a[mid]>=p) l=mid+1; else r=mid-1; } k=l; for(int i=1;i<=m;++i){ cin >> l >> r; if(r<k){ ans=q[r]-q[l-1]-p*(r-l+1); }else if(l>=k) ans=(q[r]-q[l-1])%p; else ans=q[k-1]-q[l-1]-p*(k-l)+(q[r]-q[k])%p; cout << ans << endl; } return 0; }else if(tt){ int l=1,r=n; while(l<=r){ int mid=(r+l)/2; if(a[mid]<p) l=mid+1; else r=mid-1; } k=l; for(int i=1;i<=m;++i){ cin >> l >> r; if(r<k){ ans=(q[r]-q[l-1])%p; }else if(l>=k) ans=q[r]-q[l-1]-p*(r-l+1); else ans=q[r]-q[k-1]-p*(r-k+1)+(q[k-1]-q[l-1])%p; cout << ans << endl; } return 0; } for(int i=1; i<=m; ++i) { int l,r; scanf("%d%d",&l,&r); for(int j=l; j<=r; ++j) { ans+=a[j]; if(ans>=p) ans-=p; } printf("%lld\n",ans); } return 0; }