Pagini recente » Cod sursa (job #434270) | Cod sursa (job #1603185) | Cod sursa (job #101556) | Cod sursa (job #3231341) | Cod sursa (job #655774)
Cod sursa(job #655774)
#include<stdio.h>
#include<queue>
#include<vector>
#include<fstream>
#include<algorithm>
using namespace std;
#define ll long long
typedef struct
{
int a,b;
ll c;
} gard;
ifstream f("gardieni.in");
ofstream g("gardieni.out");
#define MaxN 50010
#define Max11 15
int N,T,nr,B[Max11];
ll MAX;
gard A[MaxN];
struct comp{
bool operator () (const int &a, const int &b){
if(A[a].a == A[b].a)
return A[a].b > A[b].b;
return A[a].a > A[b].a;
}
};
priority_queue<int, vector<int>,comp> Q;
void citire(void)
{
f >> N >> T;
for(int i=1;i<=N;i++)
{
f >> A[i].a >> A[i].b >> A[i].c;
Q.push(i);
}
}
inline int cmp(int a,int b)
{
return A[a].c < A[b].c;
}
inline int min(int a,int b)
{
return a < b ? a : b;
}
void TimpMinim(void)
{
int Max;
for(;!Q.empty();)
{
nr = 1;
B[nr] = Q.top(); Q.pop();
for(;!Q.empty() && A[Q.top()].a == A[B[nr]].a;B[++nr] = Q.top(),Q.pop());
sort(B+1,B+nr+1,cmp);
!Q.empty() ? Max = min(A[Q.top()].a-1,A[B[1]].b) : Max = A[B[1]].b;
MAX += (Max-A[B[1]].a+1)*A[B[1]].c;
for(int i=1;i<=nr;i++)
if(Max < A[B[i]].b)
{
A[B[i]].a = Max+1;
Q.push(B[i]);
}
}
}
int main()
{
citire();
TimpMinim();
g << MAX;
return 0;
}