Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98121 | _JF_ | 早凉的程序2 | C++ | 解答错误 | 20 | 877 MS | 15888 KB | 1010 | 2023-08-14 12:20:24 |
#include<bits/stdc++.h> using namespace std; const int N =1e6+10; #define int long long int n,t,p,a[N],s[N],f=true,f1=true,f2=true,f3=true; void Slove(int l,int r){ int now=lower_bound(a+l,a+r,p)-a; now--; cout<<(s[now]-s[l-1])%p+(s[r]-s[now])-(r-now)*p<<endl; } void Slove1(int x,int y){ int l=x,r=y,ans; while(l+1<r){ int mid=(l+r)>>1; if(s[mid]-s[l-1]-(mid-l+1)*p>=p) ans=mid,l=mid; else r=mid; } cout<<s[ans]-s[l-1]-(ans-l+1)*p+(s[r]-s[ans])%p<<endl; } signed main(){ // freopen("text.in","r",stdin); // freopen("ans1.out","w",stdout); cin>>n>>t>>p; for(int i=1;i<=n;i++){ cin>>a[i],s[i]=s[i-1]+a[i]; if(!(a[i]<=a[i-1])) f3=false; if(!(a[i]>=a[i-1])) f2=false; if(!(a[i]>=0&&a[i]<p)) f=false; if(!(a[i]>=p)) f1=false; } while(t--){ int l,r; cin>>l>>r; if(f==true) cout<<(s[r]-s[l-1])%p<<endl; else if(f1==true) cout<<(s[r]-s[l-1])-(r-l+1)*p<<endl; else if(f2==true) Slove(l,r); else if(f3==true) Slove1(l,r); } return 0; }