记录编号 |
422932 |
评测结果 |
AAAAAAAAAA |
题目名称 |
求和问题 |
最终得分 |
100 |
用户昵称 |
~玖湫~ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.791 s |
提交时间 |
2017-07-10 19:13:03 |
内存使用 |
2.54 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int M=10000+10;
const int N=2e5+10;
const int qrt=120;
#define ll long long
int n,m;
int block[M],beg[qrt+10],bend[qrt+10];
ll an;
ll val[M],ans[N];
struct DATE{
int l,r,id;
}a[N];
bool cmp(DATE a,DATE b){
if(block[a.l]==block[b.l])
return a.r<b.r;
return block[a.l]<block[b.l];
}
inline ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int DK(){
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
n=read();
for(int i=1;i<=n;i++){
val[i]=read();
block[i]=(i-1)/qrt+1;
}
m=read();
for(int i=1;i<=m;i++){
a[i].l=read();
a[i].r=read();
a[i].id=i;
}
sort(a+1,a+m+1,cmp);
int l=1,r=0;
for(int i=1;i<=m;i++){
for(;r>a[i].r;r--)
an-=val[r];
for(;r<a[i].r;r++)
an+=val[r+1];
for(;l>a[i].l;l--)
an+=val[l-1];
for(;l<a[i].l;l++)
an-=val[l];
ans[a[i].id]=an;
}
for(int i=1;i<=m;i++)
printf("%lld\n",ans[i]);
//while(1);
return 0;
}
int dk=DK();
int main(){
;
}