Pagini recente » Cod sursa (job #1668426) | Cod sursa (job #905065) | Cod sursa (job #1821375) | Cod sursa (job #1794251) | Cod sursa (job #1742332)
#include<stdio.h>
using namespace std;
FILE *f1=fopen("aib.in","r");
FILE *f2=fopen("aib.out","w");
int aib[100001],i,j,n,m,v[100001],val,a,b,s1,s2;
void creare(int i){
int index;
index=i;
while(index<=n){
aib[index]=aib[index]+val;
index=index+(index & (-index));
}
}
int sum(int i){
int index,s=0;
index=i;
while(index>0){
s=s+aib[index];
index=index-(index&(-index));
}
return s;
}
int caut(int val){
int i,pas;
pas=1;
while(pas<=n) pas=pas*2;
pas=pas/2;
i=0;
while(pas>0){
if (i+pas<=n && val>=aib[i+pas]){
val=val-aib[i+pas];
i=i+pas;
if (val==0) return i;
}
pas=pas/2;
}
return -1;
}
int main(){
fscanf(f1,"%d%d",&n,&m);
for (i=1;i<=n;i++){
fscanf(f1,"%d",&v[i-1]);
val=v[i-1];
creare(i);
}
for (i=1;i<=m;i++){
fscanf(f1,"%d",&j);
if (j==1 || j==0) fscanf(f1,"%d%d",&a,&b);
else
fscanf(f1,"%d",&a);
if (j==0){
val=b;
creare(a);
}
else
if (j==1){
s1=sum(b);s2=sum(a-1);
fprintf(f2,"%d\n",s1-s2);
}
else{
fprintf(f2,"%d\n",caut(a));
}
}
fclose(f1);
fclose(f2);
return 0;
}