Pagini recente » Cod sursa (job #3238147) | Cod sursa (job #3299069) | Cod sursa (job #1556471) | Cod sursa (job #1789632) | Cod sursa (job #2868206)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <stack>
#define NMAX 100005
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n,m;
long s[NMAX];
void update(long poz, long val)
{
for(int i=poz;i<=n;i+=(i & -i))
{
s[i]+=val;
}
}
int query(long poz)
{
int sum=0;
for(int i=poz;i>0;i-=(i & -i))
{
sum+=s[i];
}
return sum;
}
int findk(long sum)
{
int l=1,r=n,m;
while(l<=r)
{
m=(l+r)/2;
if(query(m)>=sum)
{
r = m-1;
}
else
{
l = m+1;
}
}
if(query(l)==sum)
return l;
return -1;
}
void read()
{
int nr;
fin >> n >> m;
for(int i=1;i<=n;++i)
{
fin >> nr;
update(i,nr);
}
}
int main()
{
read();
int t,a,b;
for(int i=0;i<m;++i)
{
fin >> t;
if(t==0)
{
fin >> a >> b;
update(a,b);
}
else if(t==1)
{
fin >> a >> b;
fout << query(b)-query(a-1) << '\n';
}
else
{
fin >> a;
fout << findk(a) << '\n';
}
}
return 0;
}