Pagini recente » Cod sursa (job #1229313) | Cod sursa (job #562709) | Cod sursa (job #1700698) | Cod sursa (job #1562396) | Cod sursa (job #1437940)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m,v[15010];
long long tot;
int x,y,z;
struct nod
{
int suma,lst,ldr;
nod *st,*dr;
} *dat;
void citire()
{
fin>>n>>m;
for(int a1=1;a1<=n;a1++)
{
fin>>v[a1];
}
}
void prel(nod *&c, int str, int drr)
{
if(str==drr)
{
c->suma=v[str];
c->st=0;
c->dr=0;
}
else
{
int mij;
nod *c1,*c2;
c1=new(nod);
c2=new(nod);
mij=(str+drr)/2;
prel(c1,str,mij);
c->st=c1;
prel(c2,mij+1,drr);
c->dr=c2;
c->suma=c1->suma+c2->suma;
c->lst=str;
c->ldr=drr;
}
}
void scad1(nod *c)
{
int mij;
c->suma-=y;
mij=(c->lst+c->ldr)/2;
if(x<=mij and c->st!=0)
{
scad1(c->st);
}
else if(c->st!=0)
{
scad1(c->dr);
}
}
void afis1(nod *c)
{
if(c->lst>=x and c->ldr<=y)
{
tot+=c->suma;
}
else
{
int mij;
mij=(c->lst+c->ldr)/2;
if(x<=mij and c->st!=0)
{
afis1(c->st);
}
if(y>mij and c->dr!=0)
{
afis1(c->dr);
}
}
}
int main()
{
int mij;
citire();
dat=new(nod);
prel(dat,1,n);
for(int a1=1;a1<=m;a1++)
{
fin>>z;
if(z==0)
{
fin>>x>>y;
scad1(dat);
}
if(z==1)
{
tot=0;
fin>>x>>y;
if(y<x) switch(x,y);
afis1(dat);
fout<<tot<<'\n';
}
}
}