Pagini recente » Cod sursa (job #1115513) | Cod sursa (job #2853088) | Cod sursa (job #2631995) | Cod sursa (job #2765930) | Cod sursa (job #2633318)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout("aib.out");
int n,v[100002],pw=1;
void update (int poz, int val)
{
for (int i=poz;i<=n;i=i+(i&-i))
v[i]=v[i]+val;
}
int query (int poz)
{
int sum=0;
for (int i=poz;i>=1;i=i-(i&-i))
sum+=v[i];
return sum;
}
int q3 (int s)
{
bool ok=0;
int poz=0,pas=pw;
while (pas!=0)
{
if (v[pas+poz]==s)
ok=1;
if (v[pas+poz]<s)
{
s-=v[pas+poz];
poz+=pas;
}
pas/=2;
while(pas>=1&&pas+poz>n)
pas/=2;
}
if (ok)
return poz+1;
else
return -1;
}
int main()
{
int q,i,x,t,a,b;
fin>>n>>q;
for (i=1;i<=n;i++)
{
fin>>x;
update (i,x);
}
// int pw=1,exp=0;
while (pw<=n)
{
pw*=2;
}
pw/=2;
for (;q>0;q--)
{
fin>>t>>a;
if (t==2)
fout<<q3(a)<<'\n';
else{
fin>>b;
if (t==0)
update(a,b);
else
fout<<query(b)-query(a-1)<<'\n';
}
}
return 0;
}