Pagini recente » Cod sursa (job #935638) | Cod sursa (job #2485625) | Cod sursa (job #2132787) | Cod sursa (job #3237689) | Cod sursa (job #2552390)
#include <bits/stdc++.h>
using namespace std;
ifstream inf("aib.in");
ofstream outf("aib.out");
int n, m, v[100010], aib[100010];
void aib_add(int , int );
int aib_get(int ), tcomp(int );
int main()
{
inf>>n>>m;
for(int i=1; i<=n; i++)
inf>>v[i],aib_add(i, v[i]);
for(;m;m--)
{
int tip, a, b;
inf>>tip;
if(tip==0)
{
inf>>a>>b;
aib_add(a,b);
}
else if(tip==1)
{
inf>>a>>b;
outf<<aib_get(b)-aib_get(a-1)<<'\n';
}
else
{
inf>>a;
int sol=-1;
for(int i=1; sol==-1&&i<=n; i++)
if(aib_get(i)==a)
sol=i;
outf<<sol<<'\n';
}
}
return 0;
}
int tcomp(int a)
{
return (~a)+1;
}
void aib_add(int ind, int val)
{
int nxt=ind+(ind&tcomp(ind));
aib[ind]+=val;
while(nxt<=n)
{
aib[nxt]+=val;
nxt=nxt+(nxt&tcomp(nxt));
}
}
int aib_get(int ind)
{
int curr=ind, ret=0;
while(curr>0)
{
ret+=aib[curr];
curr=curr-(curr&tcomp(curr));
}
return ret;
}