Pagini recente » Cod sursa (job #1725781) | Cod sursa (job #2618699) | Cod sursa (job #420772) | Cod sursa (job #1826723) | Cod sursa (job #1766756)
#include <iostream>
#include <cstdio>
using namespace std;
unsigned int aib[100000+5];
unsigned int n;
unsigned int query(unsigned int p){
unsigned int rez=0,pow2;
while(p!=0){
rez+=aib[p];
pow2=(p&(-p));
p-=pow2;
}
return rez;
}
unsigned int searchh(unsigned int val){
unsigned int i=0,pas=1<<30;
while(pas!=0){
if(i+pas<=n && aib[i+pas]<=val){
i+=pas;
val-=aib[i];
}
pas/=2;
}
if(val==0)return i;
return -1;
}
void update(unsigned int p,unsigned int val){
unsigned int pow2;
while(p<=n){
aib[p]+=val;
pow2=(p&(-p));
p+=pow2;
}
}
int main()
{
unsigned int k,b,a,r;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%u %u",&n,&k);
for(unsigned int i=1;i<=n;i++)
scanf("%u",&b),update(i,b);
for(unsigned int i=1;i<=k;i++){
scanf("%u",&r);
if(r==0 || r==1)
scanf("%u %u",&a,&b);
else
scanf("%u",&a);
// prunsigned intf("%u %u\n",a,b);
if(r==0)
update(a,b);
if(r==1)
printf("%u\n",query(b)-query(a-1));
if(r==2)
printf("%u\n",searchh(a));
}
return 0;
}