比赛 |
线段数树状数组 |
评测结果 |
AAAAAAAAAA |
题目名称 |
求和问题 |
最终得分 |
100 |
用户昵称 |
Xiaokang_Zhao120 |
运行时间 |
4.897 s |
代码语言 |
C++ |
内存使用 |
4.13 MiB |
提交时间 |
2018-06-18 21:09:16 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const ll maxx=500000+1;
ll C[maxx],A,n,m;
ll lowbit(ll x)
{
return x & -x;
}
ll query(ll pos)
{
ll res=0;
while(pos>0)
{
res+=C[pos];
pos-=lowbit(pos);
}
return res;
}
ll sum(ll l,ll r)
{
return query(r)-query(l-1);
}
void add(ll pos,ll posa)
{
while(pos<=n)
{
C[pos]+=posa;
pos+=lowbit(pos);
}
}
int main()
{
freopen("sum.in","r",stdin);freopen("sum.out","w",stdout);
cin>>n;
memset(C,0,sizeof(C));
for(ll i=1;i<=n;i++)
{
cin>>A;
add(i,A);
}
cin>>m;
for(ll i=1;i<=m;i++)
{
ll l,r;
cin>>l>>r;
cout<<sum(l,r)<<endl;
}
return 0;
}