70分求调!用的树状数组,将s开成1e6 + 5就可以通过,匪夷所思。
查看原帖
70分求调!用的树状数组,将s开成1e6 + 5就可以通过,匪夷所思。
1268455
hedging楼主2024/8/27 23:47
#include<cstdio>
#include<iostream>
using namespace std;
class BinaryIndexedTree
{
    private:
        int size;
        int s[500005];
        int GetLowBit(int x)
        {
            return x & -x;
        }
        
    public:
        BinaryIndexedTree(int SizeOfTree)
        {
            size = SizeOfTree;
        }
        void Add(int pos, int x)
        {
            int cur = pos;
            while(cur <= size)
            {
                s[cur] += x;
                cur += GetLowBit(cur);
            }
            return;
        }
        int PrefixSum(int r)
        {
            int sum = 0;
            int cur = r;
            while(cur > 0)
            {
                sum += s[cur];
                cur -= GetLowBit(cur);
            }
            return sum;
        }
        int Query(int l, int r)
        {
            return PrefixSum(r) - PrefixSum(l - 1);
        }
};
int main()
{
    int n, m;
    cin >> n >> m;
    BinaryIndexedTree A(n);
    for(int i = 1; i <= n; i++)
    {
        int Ai;
        cin >> Ai;
        A.Add(i, Ai);
    }
    for(int i = 1; i <= m; i++)
    {
        int op;
        cin >> op;
        if(op == 1)
        {
            int x, k;
            cin >> x >> k;
            A.Add(x, k);
        }
        if(op == 2)
        {
            int x, y;
            cin >> x >> y;
            int ans = A.Query(x, y);
            printf("%d\n", ans);
        }
    }
    return 0;
}
2024/8/27 23:47
加载中...