比赛 线段数树状数组 评测结果 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;
}