Pagini recente » Cod sursa (job #3261454) | Cod sursa (job #887931) | Cod sursa (job #357546) | Cod sursa (job #2442085) | Cod sursa (job #1762551)
#include <iostream>
#include <cstdio>
#define NMAX 100005
#define MMAX 150005
using namespace std;
int N,M;
int a[NMAX];
int aib[NMAX];
void inserare(int i, int x)
{
while(i<=N)
{
aib[i] += x;
int p = (i^(i-1))&i;
i += p;
}
}
int suma(int i)
{
int s = 0;
while(i)
{
s+=aib[i];
int p = (i^(i-1))&i;
i = i - p;
}
return s;
}
int cauta(int x)
{
int st=1,dr=N;
while(st<dr)
{
int mij = (st+dr)/2;
int val_mij = suma(mij);
if(val_mij == x)
{
return mij;
}
if(val_mij < x)
{
st = mij+1;
}
if(val_mij > x)
{
dr = mij;
}
}
}
void citire()
{
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++)
{
int x;
scanf("%d",&x);
inserare(i,x);
}
for(int i=1;i<=M;i++)
{
int tip;
int a,b;
scanf("%d",&tip);
if(tip==0)
{
scanf("%d%d",&a,&b);
inserare(a,b);
}
else if(tip==1)
{
scanf("%d%d",&a,&b);
printf("%d\n",suma(b) - suma(a-1));
}
else
{
scanf("%d",&a);
printf("%d\n",cauta(a));
}
}
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
citire();
return 0;
}