提交时间:2023-08-14 11:58:20

运行 ID: 98069

#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; }