Pagini recente » Cod sursa (job #2221491) | Cod sursa (job #53824) | Cod sursa (job #3222282) | Cod sursa (job #606991) | Cod sursa (job #1013237)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("gardieni.in");
ofstream g("gardieni.out");
struct event
{int time,tip,cost;};
bool comp(event x,event y)
{if (x.time!=y.time)
return x.time<y.time;
return x.tip<y.tip;
}
int n,t,k=0,activ[15],act,inf=(1<<31);
event ev[100005];
void Read()
{ int i,tx,ty,c;
f>>n>>t;
for(i=1;i<=n;i++)
{ f>>tx>>ty>>c;
k++;
ev[k].time=tx; ev[k].tip=0; ev[k].cost=c;
k++;
ev[k].time=ty; ev[k].tip=1; ev[k].cost=c;
}
sort(ev+1,ev+k+1,comp);
}
void Insert(int x)
{ int i;
act++; activ[act]=x;
i=act;
while(i-1 && activ[i]<activ[i-1])
{swap(activ[i],activ[i-1]);
i--;
}
}
void Delete(int x)
{ int i,j;
for(i=1;i<=act;i++)
if (activ[i]==x) break;
for(;i<act;i++)
activ[i]=activ[i+1];
act--;
}
void Solve()
{ int i,minp;
long long sol=0,sol2=0;
Insert(ev[1].cost);
minp=ev[1].cost;
for(i=2;i<=k;i++)
{ if (ev[i].time>ev[i-1].time)
{sol+=1LL*(ev[i].time-ev[i-1].time-1)*activ[1];
//cout<<ev[i-1].time<<" "<<ev[i].time<<" "<<sol<<"\n";
sol2+=minp; minp=activ[1];
}
if (ev[i].tip==0) Insert(ev[i].cost);
else Delete(ev[i].cost);
minp=min(minp,activ[1]);
}
sol2+=minp;
g<<sol+sol2;
}
int main()
{ Read();
Solve();
return 0;
}