Pagini recente » Cod sursa (job #2779024) | Cod sursa (job #61018) | Cod sursa (job #2437894) | Cod sursa (job #622581) | Cod sursa (job #761123)
Cod sursa(job #761123)
#include<fstream>
#define bit(x) (x & (-x))
using namespace std;
int aib[100005];
short lsb[100005];
int N;
void update(int p,int val){
for(;p<=N;p+=lsb[p])
aib[p]+=val;
}
int query(int p){
int s=0;
for(;p>0;p-=lsb[p])
s+=aib[p];
return s;
}
int bsearch(int k){
int lb=1,ub=N,mid,sol=0;
while(lb<=ub){
mid=(ub+lb)>>1;
if(query(mid)>=k){
sol=mid;
ub=mid-1;
}
else lb=mid+1;
}
if(query(sol)==k)return sol;
return -1;
}
int main(void){
ifstream fin("aib.in");
ofstream fout("aib.out");
int m,i,q,w,cod;
fin>>N>>m;
for(i=1;i<=N;++i)lsb[i]=(i&(-i));
for(i=1;i<=N;++i){ fin>>q; update(i,q); }
for(i=1;i<=m;++i)
{
fin>>cod;
if(cod!=2)
{
fin>>q>>w;
if(cod==0)update(q,w);
else fout<<query(w)-query(q-1)<<'\n';
}
else {
fin>>q;
fout<<bsearch(q)<<'\n';
}
}
return 0;
}