Cod sursa(job #3038628)

Utilizator BadHero112Ursu Vasile BadHero112 Data 27 martie 2023 16:39:57
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>
using ll=long long;
#define S second
#define F first
#define endl '\n'
#define spid ios_base::sync_with_stdio(false);cin.tie(NULL);
const int mod=1e9+7;
const double pi=3.14159265359;
const int maxn=200001;
using namespace std;

int n,m,A[maxn],T[maxn];

int up(int i){
	return i-(i&(-i));
}

int down(int i){
	return i+(i&(-i));
}

int qr(int l,int r){
	int sum1=0,sum2=0;
	while(l){
		sum1+=T[l];
		l=up(l);
	}
	while(r){
		sum2+=T[r];
		r=up(r);
	}
	return sum2-sum1;
}

void upd2(int x,int delta){
	if(x>n)return;
	T[x]-=delta;
	upd2(down(x),delta);
}

int main(){
	ifstream cin("datorii.in");
	ofstream cout("datorii.out");
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>A[i];
		T[i]=A[i];
	}
	for(int i=1;i<=n;i++){
		int j=down(i);
		T[j]+=T[i];
	}
	while(m--){
		int c,x,y;
		cin>>c>>x>>y;
		if(c==0){
			upd2(x,y);
		}
		else{
			cout<<qr(x-1,y)<<endl;
		}
	}
}