Pagini recente » Cod sursa (job #597064) | Cod sursa (job #1599698) | Cod sursa (job #1804868) | Cod sursa (job #408865) | Cod sursa (job #2024511)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");\
#define zeros(x)(x&(-x))
int v[100100], n, m, a, b, i, q, AIB[100100];
void add(int x, int hm)
{
for(int i=x; i<=n; i+=zeros(i))
{
AIB[i]+=hm;
}
}
int calc(int x)
{
int i, sum=0;
for(i=x; i>0; i-=zeros(i))
sum+=AIB[i];
return sum;
}
int cb(int x)
{
int st=0, dr=n+1, mid;
while(dr-st>1)
{
mid=(st+dr)/2;
if(calc(mid)<=x)
{
st=mid;
}
else
{
dr=mid;
}
}
if(st>=n+1||st==0||calc(st)!=x)
return -1;
return st;
}
int main()
{
f>>n>>m;
for(i=1; i<=n; i++)
{
f>>v[i];
add(i, v[i]);
}
for(i=1; i<=m; i++)
{
f>>q;
if(q==0)
{
f>>a>>b;
add(a, b);
}
if(q==1)
{
f>>a>>b;
g<<calc(b)-calc(a-1)<<'\n';
}
if(q==2)
{
f>>a;
g<<cb(a)<<'\n';
}
}
return 0;
}