Pagini recente » Cod sursa (job #2074270) | Cod sursa (job #2284871) | Cod sursa (job #13343) | Cod sursa (job #1675392) | Cod sursa (job #1703265)
#include <iostream>
#include <fstream>
using namespace std;
#define maxn 15000
ifstream f("datorii.in");
ofstream g("datorii.out");
int poz,val,suma=0,start,stop,N,M;
int Arb[2*maxn+50]={};
void afisare(){
for (int i=1;i<=20;i++){
cout<<Arb[i]<<" ";
}
cout<<endl;
}
void update(int n, int st, int dr)
{
if (st==dr){
Arb[n]+=val;
return;
}
else {
int m=(st+dr)/2;
if (poz<=m){
update(2*n,st,m);
}
else{
update(2*n+1,m+1,dr);
}
Arb[n]=Arb[2*n]+Arb[2*n+1];
}
}
int query(int x, int st, int dr)
{
if (start<=st && dr<=stop){
return Arb[x];
}
int m=(st+dr)/2;
int mid=(1+N)/2;
if (start<=m){
return (query(2*x,st,m));
}
if(m<stop){
return (query(2*x+1,m+1,dr));
}
}
int main()
{
int mid,x,a,b;
f>>N>>M;
for (int i=1; i<=N;i++)
{
f>>x;
poz=i;
val=x;
update(1,1,N);
afisare();
}
for (int i=1;i<=M;i++){
f>>x>>a>>b;
if (x==1){
suma=0;
start=a;
stop=b;
mid =(1+N)/2;
if(start<=mid && mid<stop)
g<<query(2*1,1,mid)+query(2*1+1,mid+1,N);
else
g<<query(1,1,N);
g<<endl;
}
else {
poz=a;
val=-b;
update(1,1,N);
}
}
}