Pagini recente » Cod sursa (job #1109680) | Cod sursa (job #270782) | Cod sursa (job #1568706) | Cod sursa (job #1577016) | Cod sursa (job #2476510)
#include <fstream>
#include <iostream>
#define zeros(x) ((x^(x-1))&x)
using namespace std;
int n,m;
long long aib[100010];
int update(int poz,int value)
{
for(int i=poz;i<=n;i+=zeros(i) )
aib[i]+=value;
}
int sum(int poz)
{
int sum=0;
for(int i=poz;i;i-=zeros(i))
sum+=aib[i];
return sum;
}
int poz(int val)
{
int p,poz;
for(p=1;p<=n;p<<=1);
for(poz=0;p>0;p>>=1)
{
if(poz+p <= n)
if(sum(poz+p)<=val) poz+=p;
}
if(sum(poz) !=val) return -1;
if(poz==0) return -1;
return poz;
}
int main()
{
ifstream t1("aib.in");
ofstream t2("aib.out");
t1>>n>>m;
int i,j,tip,a,b;
for(i=1;i<=n;i++)
{
t1>>a;
update(i,a);
}
for(i=1;i<=m;i++)
{
t1>>tip;
if(tip==2) t1>>a;
else t1>>a>>b;
if(tip==0) update(a,b);
if(tip==1) t2<<sum(b)-sum(a-1)<<'\n';
if(tip==2) t2<<poz(a)<<'\n';
}
t1.close();
t2.close();
return 0;
}