Pagini recente » Cod sursa (job #558697) | Cod sursa (job #1240092) | Cod sursa (job #1655320) | Cod sursa (job #969192) | Cod sursa (job #1690937)
#include <fstream>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, m, AIB[100002];
void Add(int x, int quantity)
{
int i;
for (i = x; i <= n; i += zeros(i))
AIB[i] += quantity;
}
int Compute(int x)
{
int i, ret = 0;
for (i = x; i > 0; i -= zeros(i))
ret += AIB[i];
return ret;
}
int main()
{
f >> n >> m;
int x;
for(int i=1; i<=n; ++i)
{
f >> x;
Add(i, x);
}
//for(int i=1; i<=n; ++i)
//g << AIB[i] << " ";
for (int i=1; i<=m; ++i)
{
int val, poz=0, a, b;
f >> x;
if (!x)
{
f >> poz >> val;
Add(poz, val);
}
else if (x==1)
{
f >> a >> b;
g << (Compute(b) - Compute(a-1)) << '\n';
}
else //cautarea binara
{
int x;
f >> x;
int pas = 131072; //2^17
while(pas)
{
if (poz+pas<=n && AIB[poz+pas]<=x)
{
x -= AIB[poz+pas];
poz += pas;
}
pas/=2;
}
if (x == 0) g << poz << '\n';
else g << "-1" << '\n';
}
}
return 0;
}