Pagini recente » Cod sursa (job #87430) | Cod sursa (job #2960396) | Cod sursa (job #1102568) | Cod sursa (job #3152168) | Cod sursa (job #2297550)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m;
int v[100005];
int sum[100005];
void update(int x, int val){
int i;
for(i=x;i<=n;i+=(i^(i&(i-1))))
sum[i]+=val;
}
int query(int x){
int suma=0;
while(x>0){
suma+=sum[x];
x-=(x^(x&(x-1)));
}
return suma;
}
int smen(int val){
int i=0,pas;
for(pas=1;pas<n;pas<<=1);
while(pas){
if(i+pas<=n && sum[i+pas]<=val){
i+=pas;
val-=sum[i];
if(!val)
return i;
}
pas>>=1;
}
return -1;
}
int main(){
int i,j,x,y,op;
fin>>n>>m;
for(i=1;i<=n;i++){
fin>>v[i];
for(j=i;j<=n;j+=(j^(j&(j-1))))
sum[j]+=v[i];
}
for(i=1;i<=m;i++){
fin>>op;
if(op==0){
fin>>x>>y;
update(x,y);
}
else if(op==1){
fin>>x>>y;
fout<<query(y)-query(x-1)<<"\n";
}
else if(op==2){
fin>>x;
fout<<smen(x)<<"\n";
}
}
return 0;
}