Pagini recente » Cod sursa (job #2466662) | Cod sursa (job #2781903)
#include <bits/stdc++.h>
#define DimMax 100000
using namespace std;
ifstream fin ( "aib.in" );
ofstream fout ( "aib.out" );
int n, m;
int v[DimMax + 1];
int aib[DimMax + 1];
int tip, a, b;
int query ( int k )
{
int ans = 0;
while ( k > 0 )
{
ans += aib[k];
k -= k&-k;
}
return ans;
}
void update ( int k, int val )
{
while ( k <= n )
{
aib[k] += val;
k += k&-k;
}
}
int CautaBinar ( int s )
{
int sol = -1;
int st = 1; int dr = n;
while ( st <= dr )
{
int mij = (st + dr) / 2;
if ( query(mij) >= s )
{
sol = mij;
dr = mij - 1;
} else st = mij + 1;
}
if ( query(sol) == s ) return sol;
else return -1;
}
int main()
{
fin >> n >> m;
for ( int i = 1; i <= n; i++ )
{
fin >> v[i];
update(i, v[i]);
}
for ( int i = 1; i <= m; i++ )
{
fin >> tip;
if ( tip == 0 )
{
fin >> a >> b;
update(a, b);
}
else if ( tip == 1 )
{
fin >> a >> b;
fout << query(b) - query(a - 1) << '\n';
}
else
{
fin >> a;
fout << CautaBinar(a) << '\n';
}
}
return 0;
}