Pagini recente » Cod sursa (job #1525413) | Cod sursa (job #2328195) | Cod sursa (job #426669) | Cod sursa (job #2956694) | Cod sursa (job #2399014)
#include <bits/stdc++.h>
#define maxn 100000
using namespace std;
int v[maxn+5], aib[maxn+5];
int n;
void update ( int p, int val )
{
int p2;
while (p <= n) aib[p] += val, p2 = (p&(-p)), p += p2;
}
int query ( int p )
{
int s = 0, p2;
while (p>0) s += aib[p], p2 = (p&(-p)), p -= p2;
return s;
}
int src ( int val )
{
int pas = (1<<30), r = 0;
for ( ; pas > 0; pas >>= 1 )
if ( r + pas <= n && aib[r+pas] <= val ) r += pas, val -= aib[r];
if (val == 0 && r > 0) return r;
else return -1;
}
int main ()
{
ifstream fin ( "aib.in" );
ofstream fout ( "aib.out" );
int m; fin >> n >> m;
int i, t, a, b;
for ( i = 1; i <= n; i++ ) fin >> v[i], update (i, v[i]);
while (m--)
{
fin >> t >> a;
if ( t == 0 ) fin >> b, update (a, b);
else if ( t == 1 ) fin >> b, fout << query (b) - query (a-1) << '\n';
else fout << src (a) << '\n';
}
fin.close ();
fout.close ();
return 0;
}