Pagini recente » Cod sursa (job #283326) | Cod sursa (job #1756532) | Cod sursa (job #1489134) | Cod sursa (job #860883) | Cod sursa (job #1851291)
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int N, M, aib[Nmax];
inline void Update(int p, int x)
{
while(p <= N)
{
aib[p] += x;
p = p + (p & (-p));
}
}
inline int Query(int p)
{
int s = 0;
while(p > 0)
{
s += aib[p];
p = p - (p & (-p));
}
return s;
}
inline int CBS(int a)
{
int st, dr, mid, p, x;
st = 1;
dr = N;
p = -1;
while(st <= dr)
{
mid = (st + dr) / 2;
x = Query(mid);
if(x == a)
{
p = mid;
dr = mid - 1;
}
else if(x > a)
dr = mid - 1;
else
st = mid + 1;
}
return p;
}
int main()
{
f >> N >> M;
int i, x, p, a, op, y;
for(i = 1; i <= N; i++)
{
f >> x;
Update(i, x);
}
while(M--)
{
f >> op;
if(op == 0)
{
f >> p >> x;
Update(p, x);
}
else if(op == 1)
{
f >> x >> y;
g << Query(y) - Query(x - 1) << "\n";
}
else
{
f >> a;
g << CBS(a) << "\n";
}
}
f.close();
g.close();
return 0;
}