社区讨论

站外题求调

学术版参与者 5已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@lzqffzbw
此快照首次捕获于
2024/08/12 11:21
2 年前
此快照最后确认于
2024/08/12 12:28
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define ing long long
using namespace std;
int n,q;
int x,d;
const int N = 2e5+10;
int a[N];
int t[N];

int lowbit(int x) { return x & (-x); }

int find(int x) {
	int res = 0;
	while (x > 0) {
		res += t[x];
		x-=lowbit(x);
	}
	return res;
}

void add(int x, int k) {
	int tmp = k - a[x];
	a[x] = k;
	while (x <= n) {
		t[x] += tmp;
		x += lowbit(x);
	}
}

signed main(){
	cin >> n >> q;
	for(int i=1;i<=n;i++){
		cin >> a[i];
	}
	for(int i = 1;i <= n;i++)  t[i] = a[i];
	for(int i = 1; i <= n; i++)  if(i + lowbit(i) <= n)  t[i + lowbit(i)] += t[i];

	while(q--){
		int fl;
		cin>>fl;
		if(fl == 1){
			cin >> x >> d;
			add(x,d);
		}
		else if(fl == 2){
			cin >> x;
			cout << find(x) * 1ll << endl;
		}
	}
	return 0;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...