Pagini recente » Cod sursa (job #471619) | Cod sursa (job #496967) | Cod sursa (job #1247107) | Cod sursa (job #111757) | Cod sursa (job #2497362)
#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;
FILE *fin = fopen("aib.in","r"), *fout = fopen("aib.out","w");
int Bit[NMAX],n,m;
void update(int poz,int val)
{
for(int x = poz; x <= n; x += (x & -x))
Bit[x] += val ;
}
int query(int poz)
{
int s = 0;
for(int x = poz; x > 0; x -= (x & -x))
s += Bit[x];
return s;
}
int Sum(int a,int b)
{
return query(b)-query(a-1);
}
int poz_minim(int sum)
{
int st = 1, dr = n,s = 0;
while(st < dr)
{
int d = (st + dr)/2;
s = query(d);
if( sum <= s )dr = d;
else
st = d+1;
}
return st;
}
int main()
{
fscanf(fin,"%d %d",&n,&m);
for(int i=1;i<=n;++i)
{
int x;
fscanf(fin,"%d",&x);
update(i,x);
}
int t,a,b;
while(m--)
{
fscanf(fin,"%d",&t);
if(t == 2)
{
fscanf(fin,"%d",&a);
fprintf(fout,"%d\n",poz_minim(a));
}
else
{
fscanf(fin,"%d %d",&a,&b);
if(t == 0)
update(a,b);
else
fprintf(fout,"%d\n",Sum(a,b));
}
}
}