Pagini recente » Cod sursa (job #1046623) | Cod sursa (job #1989707) | Cod sursa (job #99001) | Cod sursa (job #1877559) | Cod sursa (job #3143219)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int N = 100010;
int n,q,a[N];
int suma(int p)
{
int suma=0;
for(int i=p; i>0; i-=i&(-i))
suma+=a[i];
return suma;
}
void aduna(int p,int val)
{
for(int i=p; i<=n; i+=i&(-i))
a[i]+=val;
}
int suma(int st,int dr)
{
return suma(dr)-suma(st-1);
}
int main()
{
f>>n>>q;
for(int i=1; i<=n; i++)
{
int x;
f>>x;
aduna(i,x);
}
for(int i=1; i<=q; i++)
{
int t;
f>>t;
if(t==0)
{
int poz,val;
f>>poz>>val;
aduna(poz,val);
}
else if(t==1)
{
int st,dr;
f>>st>>dr;
g<<suma(st,dr)<<'\n';
}
else
{
int sum;
f>>sum;
int lo=0,hi=n,mi;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(suma(mi)<sum)
lo=mi;
else
hi=mi;
}
if(suma(hi)==sum)
g<<hi<<'\n';
else
g<<"-1\n";
}
}
return 0;
}