Pagini recente » Cod sursa (job #144369) | Cod sursa (job #977093) | Cod sursa (job #1231481) | Cod sursa (job #586899) | Cod sursa (job #2530700)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int N = 100010;
int n,o,t,a,b,A[N];
inline void aduna(int,int);
inline int suma(int);
int main()
{
f>>n>>o;
for(int i=1; i<=n; i++)
{
f>>a;
aduna(i,a);
}
for(; o; o--)
{
f>>t>>a;
if(t==0)
{
f>>b;
aduna(a,b);
}
else if(t==1)
{
f>>b;
g<<suma(b)-suma(a-1)<<'\n';
}
else
{
int lo=0,hi=n,mi;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(suma(mi)>=a)
hi=mi;
else
lo=mi;
}
if(suma(hi)==a)
g<<hi<<'\n';
else
g<<"-1\n";
}
}
return 0;
}
inline void aduna(int poz,int val)
{
for(; poz<=n; poz+=(poz&(-poz)))
A[poz]+=val;
}
inline int suma(int poz)
{
int sum=0;
for(; poz>0; poz-=(poz&(-poz)))
sum+=A[poz];
return sum;
}