Pagini recente » Cod sursa (job #2834082) | Cod sursa (job #2559881) | Cod sursa (job #2188586) | Cod sursa (job #2087659) | Cod sursa (job #2987655)
#include <iostream>
#include<fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
long long int n,m,arb[100005],k,a,b;
void update(long long int poz,long long int val)
{
long c=0;
while(poz<=n)
{
arb[poz]=arb[poz]+val;
while(!(poz&(1<<c)))
c++;
poz=poz+(1<<c);
c++;
}
}
long long int query(long long int poz)
{
long long int s=0,c=0;
while(poz>0)
{
s=s+arb[poz];
while(!(poz&(1<<c)))
c++;
poz=poz-(1<<c);
c++;
}
return s;
}
long long int search(long long int val)
{
long c=1,i=0;
while(c<n)
c=c<<1;
while (c)
{
if(i+c<=n && val>=arb[i+c])
{
i=i+c;
val=val-arb[i];
if(!val)
return i;
}
c=c>>1;
}
return -1;
}
int main()
{
fin>>n>>m;
long long int i,x;
for (i=1;i<=n;i++)
{
fin>>x;
update(i,x);
}
for (i=0;i<m;i++)
{
fin>>k;
switch(k)
{
case 0:fin>>a>>b; update(a,b);break;
case 1:fin>>a>>b; fout<<query(b)-query(a-1)<<"\n";break;
case 2:fin>>a; fout<<search(a)<<"\n";break;
}
}
return 0;
}