Pagini recente » Istoria paginii jc2021/solutii/aglet | Statistici Kovacs Akos (KovacsAkos) | Cod sursa (job #1184313) | Monitorul de evaluare | Cod sursa (job #2384518)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int N,M,i,v,T,a,b,A[100010];
int q(int p){
int sol=0;
for(;p;p-=(p&-p))
sol+=A[p];
return sol;
}
void up(int a, int b){
for(;a<=N;a+=(a&-a))
A[a]+=b;
}
int poz(int sum){
int st=1,dr=N;
while(st<=dr){
int mid = (st+dr)/2;
if(q(mid)>=sum)
dr=mid-1;
else
st=mid+1;
}
if(q(st)==sum)
return st;
else
return -1;
}
int main(){
fin>>N>>M;
for(i=1;i<=N;i++){
fin>>v;
up(i,v);
}
for(i=1;i<=M;i++){
fin>>T;
if(T==0){
fin>>a>>b;
up(a,b);
}
else
if(T==1){
fin>>a>>b;
fout<<q(b)-q(a-1)<<"\n";
}
else{
fin>>a;
fout<<poz(a)<<"\n";
}
}
return 0;
}