Pagini recente » Cod sursa (job #2909733) | Cod sursa (job #826807) | Cod sursa (job #3175977) | Cod sursa (job #429647) | Cod sursa (job #544307)
Cod sursa(job #544307)
#include<fstream.h>
ifstream f("datorii.in");
ofstream g("datorii.out");
int N,M,MaxArb[60071],val,pos,suma,a,b;
void update(int,int,int);
void query(int,int,int);
int main()
{ int x,i;
f>>N>>M;
for(i=1;i<=N;i++)
{ f>>x;
pos=i; val=x;
update(1,1,N);
}
for(i=1;i<=M;i++)
{ f>>x>>a>>b;
if(1==x)
{ suma=0;
query(1,1,N);
g<<suma<<'\n';
}
else {pos=a; val=b;
update(1,1,N);
}
}
f.close(); g.close();
return 0;
}
void update(int x,int st,int dr)
{ if(st==dr)
{ if(MaxArb[x]) MaxArb[x]-=val;
else MaxArb[x]=val;
return; }
int m=(st+dr)/2;
if(pos<=m) update(2*x,st,m);
else update(2*x+1,m+1,dr);
MaxArb[x]=MaxArb[2*x]+MaxArb[2*x+1];
}
void query(int x,int st,int dr)
{ if(a<=st&&dr<=b)
{ suma+=MaxArb[x]; return;}
int m=(st+dr)/2;
if(a<=m) query(2*x,st,m);
if(m<b) query(2*x+1,m+1,dr);
}