Pagini recente » Cod sursa (job #2909442) | Cod sursa (job #212650) | Cod sursa (job #2203299) | Cod sursa (job #2151000) | Cod sursa (job #609674)
Cod sursa(job #609674)
#include <fstream>
#define NMAX 100001
#include <cstring>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,i,m,a,b,x,o,val;
int Arb[NMAX];
void update(int poz,int val) {
int p,k;
while (poz<=n) {
Arb[poz]+=val;p=1;k=0;
while ((poz&p)==0) {
k++;
p<<=1;
}
poz+=(1<<k);
}
}
void update2(int poz,int val) {
int p,k;
while (poz<=n) {
Arb[poz]-=val;p=1;k=0;
while ((poz&p)==0) {
k++;
p<<=1;
}
poz+=(1<<k);
}
}
int query(int poz) {
int p,k,val=0;
while (poz>0) {
val+=Arb[poz];p=1;k=0;
while ((poz&p)==0) {
k++;
p<<=1;
}
poz-=(1<<k);
}
return val;
}
int main() {
memset(Arb,0,sizeof(Arb));
f >> n >> m;
for (i=1;i<=n;i++) {
f >> x;
update(i,x);
}
for (i=1;i<=m;i++) {
f >> o;
if (o==0) {
f >> a >> b;
update2(a,b);
}
if (o==1) {
f >> a >> b;
val=query(b)-query(a-1);
g << val << '\n';
}
}
f.close();g.close();
return 0;
}