Pagini recente » Cod sursa (job #2253073) | Cod sursa (job #3159761) | Cod sursa (job #2787229) | Cod sursa (job #2965599) | Cod sursa (job #1690921)
#include <fstream>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, m, AIB[100001];
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, 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 i = 0;
f >> x;
int pas = 17; //log2(N)
while(pas)
{
if (i+pas<=n && AIB[i+pas]<=x)
{
x -= AIB[i+pas];
i+=pas;
}
pas/=2;
}
g << i << '\n';
}
}
return 0;
}