Pagini recente » Cod sursa (job #668894) | Cod sursa (job #188935) | Cod sursa (job #755775) | Cod sursa (job #1567472) | Cod sursa (job #2573600)
#include <bits/stdc++.h>
#define nMax 100005
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m, x, tip, a, b, aib[nMax];
void update(int val, int pos)
{
for(int i=pos; i<=n; i+=(-i)&i)
aib[i]+=val;
}
int sum(int pos)
{
int s=0;
for(int i=pos; i>=1; i-=(-i)&i)
s+=aib[i];
return s;
}
int src(int x)
{
int l=1, r=n;
while(l<=r)
{
int mid=(l+r)>>1;
if(sum(mid)==x)
return mid;
if(sum(mid)>x)
r=mid-1;
else
l=mid+1;
}
return -1;
}
int main()
{
fin >> n >> m;
for(int i=1; i<=n; i++)
{
fin >> x;
update(x, i);
}
while(m--)
{
fin >> tip >> a;
if(tip==0)
{
fin >> b;
update(b, a);
}
else if(tip==1)
{
fin >> b;
fout << sum(b)-sum(a-1) << "\n";
}
else
fout << src(a) << "\n";
}
return 0;
}