我这个咋超时了啊 2,9,10三个点
查看原帖
我这个咋超时了啊 2,9,10三个点
1048629
Missnovdoes楼主2024/3/8 18:05
#include <bits/stdc++.h>
using namespace std;


const long long maxn = 5e5 + 10;
long long a[maxn];
long long c[maxn];
long long n;
long long lowbit(long long i)
{
	return i & (-i);
}
long long sum = 0;
long long query(long long x)
{
	sum = 0;
	for (long long i = x; i > 0; i -= lowbit(i))
	{
		sum += c[i];
	}
	return sum;
}
void update(long long x,long long add)
{
	for (long long i = x; i <= n; i += lowbit(i))
	{
		c[i] += add;
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n;
	long long m;
	cin >> m;
	for (long long i = 1; i <= n; i++)
	{
		cin >> a[i];
		update(i,a[i]);
	}
	while (m--)
	{
		long long op;
		long long x, y;
		long long k;
		cin >> op ;
		if (op == 1)//将第k个数加上k
		{
			cin >> x >> y >> k;
			for (int i = x; i <= y; i++)
			{
				update(i, k);
			}
		}
		else
		{//执行求和操作
			cin >> x;
			cout << query(x) - query(x - 1) << '\n';
		}

	}
	return 0;
}
2024/3/8 18:05
加载中...