Pagini recente » Cod sursa (job #2629331) | Cod sursa (job #2275383) | Cod sursa (job #374354) | Cod sursa (job #1075742) | Cod sursa (job #2040782)
#include <fstream>
#define DIM 100002
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, m, x, tip, a, b;
unsigned int v[DIM];
void update(int a, int b)
{
for(; a <= n; a += (a & -a))
v[a] += b;
}
unsigned int query(int a)
{
unsigned int s = 0;
for(; a; a -= (a & -a))
s += v[a];
return s;
}
void solve0()
{
f>>a>>b;
update(a, b);
}
void solve1()
{
f>>a>>b;
-- a;
unsigned int A = 0;
if(a)
A = query(a);
unsigned int B = query(b);
g<<B - A<<'\n';
}
void solve2()
{
f>>a;
int st = 1;
int dr = n;
while(st <= dr)
{
int mid = (st + dr) / 2;
int val = query(mid);
if(val >= a)
dr = mid - 1;
else
st = mid + 1;
}
if(query(st) == a)
g<<st<<'\n';
else
g<<"-1\n";
}
int main()
{
f>>n>>m;
for(int i = 1; i <= n; ++ i)
{
f>>x;
update(i, x);
}
for(int i = 1; i <= m; ++ i)
{
f>>tip;
switch (tip)
{
case 0: solve0(); break;
case 1: solve1(); break;
case 2: solve2(); break;
}
}
return 0;
}