Pagini recente » Cod sursa (job #2083290) | Cod sursa (job #366010) | Cod sursa (job #2270765) | Cod sursa (job #730380) | Cod sursa (job #1448191)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
unsigned int a,b,n,m,caz,AIB[101001];
unsigned int zeros(int x)
{
return ((x^(x-1))&x);
}
void bagval(unsigned int poz,unsigned int val)
{
while(poz<=n)
{
AIB[poz]+=val;
poz+=zeros(poz);
}
}
unsigned int Query(unsigned int poz)
{
unsigned int suma=0;
while(poz)
{
suma+=AIB[poz];
poz-=zeros(poz);
}
return suma;
}
int cauta(int val)
{
unsigned int i,step;
for (step = 1; step <= n; step <<= 1);
step >>= 1;
for (i=0; step; step >>= 1)
{
if (step <= n)
{
if(AIB[i+step]<=val)
{
i += step;
val -= AIB[i];
if (!val) return i;
}
}
}
return -1;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++) {f>>a; bagval(i,a);}
while(m--)
{
f>>caz;
if(!caz) {f>>a>>b; bagval(a,b);}
if(caz==1) {f>>a>>b; g<<Query(b)-Query(a-1)<<'\n';}
if(caz==2) {f>>a; g<<cauta(a)<<'\n';}
}
g.close();
return 0;
}