站外题求调
  • 板块学术版
  • 楼主_154
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/8/12 11:19
  • 上次更新2024/8/12 12:28:58
查看原帖
站外题求调
731662
_154楼主2024/8/12 11:19

#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;
}
2024/8/12 11:19
加载中...