记录编号 422932 评测结果 AAAAAAAAAA
题目名称 求和问题 最终得分 100
用户昵称 Gravatar~玖湫~ 是否通过 通过
代码语言 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(){
   ;
}