Pagini recente » Cod sursa (job #2182509) | Cod sursa (job #2808730) | Cod sursa (job #3147066) | Cod sursa (job #880210) | Cod sursa (job #2497376)
#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;
FILE *fin = fopen("aib.in","r");
FILE *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 cauta(int st,int dr,int val)
{
if(st == dr)
if(query(st) == val)return st;
else
return -1;
else
{
int d = (st + dr)/2;
int s = query(d);
if(val <= s)return cauta(1,d,val);
else
cauta(d+1,dr,val);
}
}
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",cauta(1,n,a));
}
else
{
fscanf(fin,"%d %d",&a,&b);
if(t == 0)
update(a,b);
else
fprintf(fout,"%d\n",Sum(a,b));
}
}
}