Pagini recente » Cod sursa (job #207665) | Cod sursa (job #653997) | Cod sursa (job #712391) | Cod sursa (job #1618377) | Cod sursa (job #1265087)
#include<cstdio>
using namespace std;
const int NMAX = 100002;
int aib[NMAX+1];
int n;
int lsb(int x)
{
return x&(-x);
}
void update(int poz, int val) {
for(int i = poz; i <= n; i += lsb(i))
aib[i] += val;
}
int query(int poz) {
int ans = 0;
while(poz) {
ans += aib[poz];
poz -= lsb(poz);
}
return ans;
}
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
int m,poz,val,op,i,x,in,sf,mij,a,b;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
// printf("%d ",x);
update(i,x);
}
for(i=1;i<=m;i++)
{
scanf("%d",&op);
if(op==0)
{
scanf("%d%d",&poz,&val);
update(poz,val);
}
if(op==1)
{
scanf("%d%d",&a,&b);
printf("%d\n",(query(b)-query(a-1)));
}
if(op==2)
{
scanf("%d",&val);
in=1;
sf=n;
while(in<=sf)
{
mij=(in+sf)/2;
if(query(mij)==val)
{
printf("%d\n",mij);
break;
}
if(query(mij)<val) in=mij+1;
if(query(mij)>val) sf=mij-1;
}
}
}
return 0;
}