Pagini recente » Cod sursa (job #2526493) | Cod sursa (job #2763354) | Cod sursa (job #652909) | Cod sursa (job #971988) | Cod sursa (job #877213)
Cod sursa(job #877213)
#include <fstream>
#define MAXN 15005
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n,m,v[MAXN],ai[4*MAXN],b,a,S;
bool tip;
void build_ai(int nod, int st,int dr);
void update_ai(int nod, int st,int dr);
void suma_ai(int nod,int st,int dr);
int main()
{
int i;
f>>n>>m;
for(i=1;i<=n;i++)
f>>v[i];
build_ai(1,1,n);
for(i=1;i<=m;i++){
f>>tip>>a>>b;
if(tip){
S=0;
suma_ai(1,1,n);
g<<S<<'\n';}
else
update_ai(1,1,n);}
f.close();
g.close();
return 0;
}
void build_ai(int nod, int st,int dr){
if(st==dr){
ai[nod]=v[st];
return;}
int mij=(st+dr)/2;
build_ai(2*nod,st,mij);
build_ai(2*nod+1,mij+1,dr);
ai[nod]=ai[2*nod]+ai[2*nod+1];}
void update_ai(int nod, int st,int dr){
if(st==dr){
ai[nod]-=b;
return;}
int mij=(st+dr)/2;
if(mij>=a)
update_ai(2*nod,st,mij);
else
update_ai(2*nod+1,mij+1,dr);
ai[nod]=ai[2*nod]+ai[2*nod+1];}
void suma_ai(int nod,int st,int dr){
if(st>=a&&dr<=b){
S+=ai[nod];
return;}
int mij=(st+dr)/2;
if(a<=mij)
suma_ai(2*nod,st,mij);
if(b>mij)
suma_ai(2*nod+1,mij+1,dr);}