Pagini recente » Cod sursa (job #880477) | Cod sursa (job #2228899) | Cod sursa (job #1613948) | Cod sursa (job #709992) | Cod sursa (job #1133785)
#include <iostream>
#include<stdio.h>
using namespace std;
FILE *f,*g;
int v[229000];
int q=1,N,M;
void update(int a,int b)
{
int i=a+q;
while(i>0) {v[i]+=b;i/=2;}
}
void sum(int a,int b)
{
a+=q;b+=q;
if (a==b) fprintf(g,"%d\n",v[a]);
else
{
int 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(int a)
{
int curr=1;
while(v[curr]!=a&&curr<<1<=N+q)
{
if (v[curr]>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;fprintf(g,"%d\n",curr-q);}
else {fprintf(g,"-1\n");}
}
int main()
{
int a,b,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(i=1;i<=N;i++) {fscanf(f,"%d",&x);update(i,x);}
for(i=1;i<=M;i++)
{
fscanf(f,"%d",&x);
if (x==0) {fscanf(f,"%d%d",&a,&b);update(a,b);}
if (x==1) {fscanf(f,"%d%d",&a,&b);sum(a,b);}
if (x==2) {fscanf(f,"%d",&a); query(a);}
}
return 0;
}