Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98134 | CSYZCaoMY | 早凉的程序2 | C++ | 解答错误 | 10 | 172 MS | 15516 KB | 938 | 2023-08-14 12:21:13 |
#include<bits/stdc++.h> using namespace std; long long a[1000005],t[1000005],p; inline void pushup(int now){ t[now]=(t[now<<1]+t[now<<1|1])%p; } void build(int now,int l,int r){ if(l==r){ t[now]=a[l]; return; } int mid=(l+r)>>1; build(now<<1,l,mid); build(now<<1|1,mid+1,r); pushup(now); } long long query(int l,int r,int now,int nl,int nr){ if(l==nl && r==nr) return t[now]; int mid=(nl+nr)>>1; if(r<=mid) return query(l,r,now<<1,nl,mid); else if(l<=mid) return (query(l,mid,now<<1,nl,mid)+query(mid+1,r,now<<1|1,mid+1,nr))%p; else return query(l,r,now<<1|1,mid+1,nr); } int main(){ int n,m; scanf("%d%d%lld",&n,&m,&p); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); build(1,1,n); for(int i=1;i<=m;i++){ int l,r; scanf("%d%d",&l,&r); printf("%lld\n",query(l,r,1,1,n)); } return 0; }