Pagini recente » Cod sursa (job #2913195) | Cod sursa (job #874289) | Cod sursa (job #3237779) | Cod sursa (job #844250) | Cod sursa (job #2869455)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int MAX=1e5+5;
int n,m,t[MAX],a,b,op,val;
void adauga(int i, int val)
{
for(;i<=n;i+=i&-i)
t[i]+=val;
}
int sum(int i)
{
int sum=0;
for(;i;i-=i&-i)
sum+=t[i];
return sum;
}
int cb(int a)
{
int st=1,dr=n;
while(st<=dr)
{
int m=(st+dr)/2;
if(a<=t[m])
dr=m-1;
else
st=m+1;
}
return st;
}
int main()
{
fin >> n >> m;
for(int i=1;i<=n;i++)
{
fin >> val;
adauga(i,val);
}
while(m--)
{
fin >> op;
if(op==0)
{
fin >> a >> b;
adauga(a,b);
}
else if(op==1)
{
fin >> a >> b;
fout << sum(b)-sum(a-1) << '\n';
}
else
{
fin >> a;
fout << cb(a) << '\n';
}
}
return 0;
}