Pagini recente » Cod sursa (job #649319) | Cod sursa (job #931916) | Cod sursa (job #1969208) | Cod sursa (job #2474393) | Cod sursa (job #2780667)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int nmax=100000;
int v[nmax+1];
int query(int x){
int sol=0;
for(int i=x;i>0;i=(i&(i-1))){
sol+=v[i];
}
return sol;
}
int main(){
int n,m;
fin>>n>>m;
int n2=1;
while(n2*2<=n){
n2*=2;
}
for(int i=1;i<=n;i++){
int x;
fin>>x;
for(int j=i;j<=n;j=2*j-(j&(j-1))){
v[j]+=x;
}
}
for(int i=1;i<=m;i++){
int x;
fin>>x;
if(x==0){
int y,z;
fin>>y>>z;
for(int j=y;j<=n;j=2*j-(j&(j-1))){
v[j]+=z;
}
}else if(x==1){
int y,z;
fin>>y>>z;
fout<<query(z)-query(y-1)<<"\n";
}else{
int y;
fin>>y;
int sol=0,s=0;
for(int i=n2;i>0;i/=2){
if(sol+i<=n&&s+v[sol+i]<=y){
s+=v[sol+i];
sol+=i;
}
}
if(s!=y||sol==0){
sol=-1;
}
fout<<sol<<"\n";
}
}
return 0;
}