Pagini recente » Cod sursa (job #1148353) | Cod sursa (job #2934559) | Cod sursa (job #2108057) | Cod sursa (job #2217159) | Cod sursa (job #1133911)
#include <iostream>
#include<stdio.h>
using namespace std;
FILE *f,*g;
int v[229000];
int q=1,N,M,j,a,b,s,curr;
void update(void)
{
j=a+q;
while(j>0) {v[j]+=b;j/=2;}
}
void sum(void)
{
a+=q;b+=q;
if (a==b) fprintf(g,"%d\n",v[a]);
else
{
s=v[a]+v[b];
while(a/2!=b/2)
{
if (a%2==0) s+=v[a+1];
if(b%2==1) s+=v[b-1];
a/=2;b/=2;
}
fprintf(g,"%d\n",s);
}
}
void query(void)
{
curr=1;
while(v[curr]!=a&&curr<<1<=N+q)
{
if (v[curr*2]>=a) curr*=2;
else
{
a-=v[curr*2];
curr=curr*2+1;
}
}
if (v[curr]==a) {while((curr*2+1)<=N+q) curr=curr*2+1;if (curr>q) fprintf(g,"%d\n",curr-q); else fprintf(g,"%d",N);}
else {fprintf(g,"-1\n");}
}
int main()
{
int x,i;
f=fopen("aib.in","r");
g=fopen("aib.out","w");
fscanf(f,"%d%d",&N,&M);
while (q<N) q*=2;
q--;
for(a=1;a<=N;a++) {fscanf(f,"%d",&b);update();}
for(i=1;i<=M;i++)
{
fscanf(f,"%d",&x);
if (x==0) {fscanf(f,"%d%d",&a,&b);update();}
if (x==1) {fscanf(f,"%d%d",&a,&b);sum();}
if (x==2) {fscanf(f,"%d",&a); query();}
}
return 0;
}