Pagini recente » Cod sursa (job #122783) | Cod sursa (job #2831056) | Istoria paginii runda/runda4_procesoare_binare_cu_lacat/clasament | Istoria paginii runda/simulare_clasa_9_oji/clasament | Cod sursa (job #1536045)
#include <fstream>
int aib[100001],n;
void update(int poz,int val){
while(poz<=n){
aib[poz]+=val;
poz=poz+(poz&(-poz));
}
}
int query(int poz){
int s=0;
while(poz!=0){
s+=aib[poz];
poz=poz-(poz&(-poz));
}
return s;
}
int cautbin(int val){
int poz,pas;
poz=0;
pas=1<<16;
while(pas!=0){
if(poz+pas<=n&&aib[poz+pas]<=val){
poz+=pas;
val-=aib[poz];
}
pas/=2;
}
if(val!=0)
poz=-1;
return poz;
}
using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");
int main()
{
int m,i,val,poz,cer,s,l1,l2;
in >> n >> m;
for(i=1;i<=n;i++){
in >> val;
update(i,val);
}
for(i=1;i<=m;i++){
in >> cer;
if(cer==0){
in >> poz >> val;
update(poz,val);
}
if(cer==1){
in >> l1 >> l2;
out << query(l2)-query(l1-1);
}
if(cer==2){
in >> val;
poz=cautbin(val);
if(val==0) poz=-1;
out << poz;
}
}
return 0;
}