1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include <bits/stdc++.h> using namespace std; #define mem(a,b) memset(a, b, sizeof(a)) #define rep(i,a,b) for (int (i) = (a); i < (b); ++(i)) #define repd(i,a,b) for (int (i) = (a); i > (b); --(i)) typedef long long ll; const int INF=0x3f3f3f3f; #define M 50000+5 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 ll sum[M<<2]; inline void PushPlus(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void Build(int l,int r,int rt){ if(l==r){ scanf("%lld",&sum[rt]); return ; } int m=(l+r)>>1; Build(lson); Build(rson); PushPlus(rt); } ll Query(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R){ return sum[rt]; } int m=(l+r)>>1; ll ans=0; if(L<=m) ans+=Query(L,R,lson); if(R>m) ans+=Query(L,R,rson); return ans; } int n,m,i,l; int main(){ freopen("in","r",stdin); scanf("%d",&n); Build(1,n,1); scanf("%d",&m); while(m--){ scanf("%d%d",&i,&l); printf("%lld\n",Query(i,i+l-1,1,n,1)); } return 0; }
|