Pagini recente » Cod sursa (job #935839) | Cod sursa (job #2273634) | Cod sursa (job #985665) | Cod sursa (job #2640302) | Cod sursa (job #2383617)
#include <fstream>
#define DIM 100010
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,i,j,st,dr,x,a,b,cod,sol;
int A[DIM];
void update(int poz,int val) {
for (;poz<=n;poz+=(poz&-poz))
A[poz]+=val;
}
int query(int poz) { //returneaza valoarea sumei A[1]+A[2]+...+A[poz]
int val=0;
for (;poz;poz-=(poz&-poz))
val+=A[poz];
return val;
}
int cb(int val) {
int st=1, dr=n;
while (st<=dr) {
int mid=(st+dr)/2;
if (query(mid)==val)
return mid;
if (query(mid)>val)
dr=mid-1;
else
st=mid+1;
}
}
int main() {
fin>>n>>m;
for (i=1;i<=n;i++) {
fin>>x;
update(i,x); //initializam structura facand update cu elementele vectorului
}
while (m--) {
fin>>cod;
switch(cod) {
case 0:
fin>>a>>b;
update(a,b);
break;
case 1:
fin>>a>>b;
sol=query(b)-query(a-1);
fout<<sol<<"\n";
break;
case 2:
fin>>a;
fout<<cb(a)<<"\n";
break;
}
}
return 0;
}