Pagini recente » Cod sursa (job #2569882) | Cod sursa (job #603724) | Cod sursa (job #1871764) | Cod sursa (job #1911036) | Cod sursa (job #2445014)
#include<bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, a, b, val, v[100001], aib[100001], q, tip;
void update(int nod, int x)
{
for(int i=nod; i<=n; i+=(i&(-i)))
aib[i]+=x;
}
int query(int nod)
{
int sum=0;
for(int i=nod; i; i-=(i&(-i)))
sum+=aib[i];
return sum;
}
int cb(int a)
{
int st=1;
int dr=n;
int ans=0;
int mij;
while(st<=dr)
{
mij=st+(dr-st)/2;
if(query(mij)<a)
ans=mij,st=mij+1;
else
dr=mij-1;
}
if(query(ans+1)==a)
return ans+1;
return -1;
}
int main()
{
f>>n>>q;
for(int i=1; i<=n; i++)
{
f>>v[i];
update(i, v[i]);
}
for(int i=1; i<=q; i++)
{
f>>tip;
if(tip==0)
{
f>>a>>b;
update(a, b);
}
else if(tip==1)
{
f>>a>>b;
g<<query(b)-query(a-1)<<'\n';
}
else
{
f>>a;
g<<cb(a)<<'\n';
}
}
return 0;
}