Pagini recente » Cod sursa (job #1847549) | Cod sursa (job #1505414) | Cod sursa (job #2505064) | Cod sursa (job #1350844) | Cod sursa (job #2090816)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
const int nmax=100012;
int n,m,aib[nmax];
int lsb(int q){
return q & -q;
}
void update(int q, int qq){
while(q<=n){
aib[q]+=qq;
q+=lsb(q);
}
}
int query(int q){
int sum=0;
while(q){
sum+=aib[q];
q-=lsb(q);
}
return sum;
}
int searchaib(int q){
int pos=0,c;
for(c=1;c<=n;c<<=1);
for(;c;c>>=1){
if(pos+c<=n & aib[pos+c]<=q){
pos+=c;
q-=aib[pos];
if(!q)return pos;
}
}
return -1;
}
int main()
{
int a,b,c;
fin>>n>>m;
for(int i=1;i<=n;++i){
fin>>a;
update(i,a);
}
for(int i=1;i<=m;++i){
fin>>a;
if(a<=1){
fin>>b>>c;
if(!a)
//update(b,c);
else{
fout<<query(c)-query(b-1)<<'\n';
}
}
else{
fin>>b;
fout<<searchaib(b)<<'\n';
}
}
return 0;
}