Pagini recente » Cod sursa (job #1323666) | Cod sursa (job #621151) | Cod sursa (job #2236051) | Cod sursa (job #268588) | Cod sursa (job #1650747)
#include <stdio.h>
using namespace std;
int F[100001];
int n, m;
long long sum;
void update( int poz, int val ){
while( poz <= n ){
F[poz] += val;
poz += (poz&(-poz));
}
}
long long functie( int poz ){
long long rez;
rez = 0;
while( poz >= 1 ){
rez += F[poz];
poz -= (poz&(-poz));
}
return rez;
}
int cauta( int st, int dr ){
int m;
m = (st + dr) / 2;
if( functie(m) == sum && functie(m-1) < sum )
return m;
if( st <= dr ){
if( functie(m) => sum )
return cauta(st,m-1);
else
return cauta(m+1,dr);
}
else
return -1;
}
/*int cauta( int st, int dr ){
int m;
while( st <= dr ){
m = (st + dr) / 2;
if( functie(m) == sum && functie(m-1) < sum )
return m;
else{
if( functie(m) < sum )
st = m + 1;
else
dr = m - 1;
}
}
return -1;
}*/
int main()
{
FILE *fi, *fo;
int i, op, x, y, r;
fi = fopen( "aib.in", "r" );
fo = fopen( "aib.out", "w" );
fscanf( fi, "%d%d", &n, &m );
for( i = 1; i <= n; i++ ){
fscanf(fi, "%d", &x );
update(i,x);
}
for( i = 1; i <= m; i++ ){
fscanf(fi,"%d", &op);
if( op == 0 ){
fscanf(fi,"%d%d",&x,&y );
update(x,y);
}
else if( op == 1 ){
fscanf(fi,"%d%d",&x,&y );
fprintf(fo,"%lld\n",(functie(y) - functie(x-1)) );
}
else{
fscanf(fi,"%lld", &sum);
r = cauta(1,n);
fprintf(fo,"%d\n", r );
}
}
return 0;
}