Pagini recente » Cod sursa (job #2120051) | Cod sursa (job #53626) | Cod sursa (job #452256) | Cod sursa (job #3029997) | Cod sursa (job #735926)
Cod sursa(job #735926)
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
#define nmax 100100
long arb[nmax],n,operatie,x,y,m;
void update(long poz,long val)
{
while(poz<=n)
{
arb[poz]+=val;
poz=poz+(poz&(-poz));
}
}
long query(long poz)
{
long sum=0;
while(poz>0)
{
sum+=arb[poz];
poz=poz-(poz&(-poz));
}
return sum;
}
long search(long val)
{
long left=1,right=n,mid;
while(left<=right)
{
mid=(left+right)/2;
if(query(mid)==val) return mid;
if(query(mid)<val) left=mid+1;
else right=mid-1;
}
return -1;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
long i;
scanf("%ld %ld", &n,&m);
for(i=1;i<=n;i++)
{
scanf("%ld", &x);
update(i,x);
}
for(i=1;i<=m;i++)
{
scanf("%ld", &operatie);
if(operatie==0)
{
scanf("%ld %ld", &x,&y);
update(x,y);
}
if(operatie==1)
{
scanf("%ld %ld", &x,&y);
printf("%ld\n", query(y)-query(x-1));
}
if(operatie==2)
{
scanf("%ld", &x);
printf("%ld\n", search(x));
}
}
//scanf("%i", &i);
return 0;
}