Pagini recente » Cod sursa (job #1925539) | Cod sursa (job #2840029) | Cod sursa (job #2480641) | Cod sursa (job #1570960) | Cod sursa (job #14286)
Cod sursa(job #14286)
#include<fstream>
using namespace std;
fstream f,g;
struct per{ int zi,v;};
int A[15001],N,M,i,j,x,y,z,s,vf;
per V[100001];
int st[100001],dr[100001],rad,ok,p,q,dir;
long ss(int p, int y, int z)
{
if (p==0) return 0;
if (V[p].zi<y) return ss(dr[p],y,z);
if (V[p].zi>z) return ss(st[p],y,z);
return V[p].v+ss(st[p],y,z)+ss(dr[p],y,z);
}
int main()
{
f.open("datorii.in",ios::in);
g.open("datorii.out",ios::out);
f>>N>>M;
A[0]=0;
for (i=1;i<=N;i++)
{
f>>x;
A[i]=A[i-1]+x;
}
rad=0;
for (i=1;i<=M;i++){st[i]=0;dr[i]=0;}
vf=0;
for (i=1;i<=M;i++)
{
f>>x>>y>>z;
if (x==0)
{
if (rad==0)
{ rad=1;}
else
{
p=rad;
ok=1;
while (ok)
{
if (y<V[p].zi) {dir=0;q=st[p];}
else if (y>V[p].zi)
{dir=1; q=dr[p];}
else {dir=2;V[p].v+=z;q=0;}
if (q==0)ok=0;
else p=q;
}
if (dir==0)
{vf++; V[vf].zi=y; V[vf].v=z; st[p]=vf;}
else if (dir==1)
{vf++; V[vf].zi=y; V[vf].v=z; dr[p]=vf;}
}
}
else
{
s=A[z]-A[y-1]-ss(rad,y,z);
g<<s<<endl;
}
}
g.close();
f.close();
return 0;
}