Pagini recente » Cod sursa (job #2180415) | Cod sursa (job #699350) | Cod sursa (job #1352873) | Cod sursa (job #263557) | Cod sursa (job #1889127)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int N,M,A[100010],aib[200010];
int parent(int x){
return x-(x&(~x)+1);
}
int next(int x){
return x+(x&(~x)+1);
}
bool inrange(int x){
return x<=N;
}
void update(int index,int val){
if (inrange(index)){
aib[index]+=val;
update(next(index),val);
}
else return;
}
int getsum(int x){
if (x){
return aib[x]+getsum(parent(x));
}
else return 0;
}
int cobor(int index,int k){
for (int i=1;i<=index;i++) if (aib[i]==k) return i;
return -1;
}
void caz1(){
int x,y;
fin >>x>>y;
update(x,y);
}
void caz2(){
int x,y;
fin >>x>>y;
fout <<getsum(y)-getsum(x-1)<<"\n";
}
void caz3(){
int x;
fin >>x;
fout <<cobor(N,x)<<"\n";
}
int main(){
fin >>N>>M;
for (int i=0;i<N;i++){
fin >>A[i];
update(i+1,A[i]);
}
//for (int i=1;i<=N;i++) cout <<i<<" "<<aib[i]<<endl;
while (M--){
short x;
fin>>x;
switch(x){
case 0:caz1();break;
case 1:caz2();break;
case 2:caz3();break;
}
}
return 0;
}