Pagini recente » Cod sursa (job #1735105) | Cod sursa (job #3173227) | Cod sursa (job #2847340) | Cod sursa (job #2278550) | Cod sursa (job #392164)
Cod sursa(job #392164)
#include<fstream>
#define max 100001
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int aib[max];
int n,m;
void UPDATE(int x, int val){
for( ; x<= n; x += x & -x )
aib[x] += val;
}
int SUM( int x ){
int S=0;
for( ; x ; x-= x & -x )
S+=aib[x];
return S;
}
void SEARCH( int s ){
int i,step;
for( step=1; step<n; step<<=1);
for(i=0; step; step>>=1)
if( i + step <= n && aib[i+step] <=s) { i+=step; s-=aib[i]; }
if( s>0 && i<1 ) g<<"-1\n";
else g<<i<<'\n';
}
int main(){
f>>n>>m;
int o,a,b,x;
int i;
for(i=1;i<=n;i++) {
f>>x;
UPDATE( i, x );
}
for( ; m-- ; ){
f>>o;
if( o < 2) {
f>>a>>b;
if( !o ) UPDATE( a, b);
else g<< SUM(b) - SUM(a-1)<<'\n';
continue;
}
f>>a;
SEARCH(a);
}
return 0;
}