Cod sursa(job #2091932)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 20 decembrie 2017 17:00:00
Problema Gardieni Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define VAL 50015

using namespace std;

ifstream fin("gardieni.in");
ofstream fout("gardieni.out");

struct interval
{
    int be, en, cost;
};

interval P[VAL];

int N, T, i, j, mn, k;
long long ANS;
vector <interval> S[2];

bool cmp(interval A, interval B)
{
    if (A.be==B.be)
      return A.en<B.en;
    return A.be<B.be;
}

int main()
{
    fin >> N >> T;
    for (i=1; i<=N; i++)
      fin >> P[i].be >> P[i].en >> P[i].cost;
    sort(P+1, P+N+1, cmp);
    for (i=1; i<=T; i++)
    {
        S[i % 2].clear();
        mn=(1 << 25);
        for (j=0; j<S[1-(i % 2)].size(); j++)
        {
            if (S[1-(i % 2)][j].be<=i && i<=S[1-(i % 2)][j].en)
            {
                S[i % 2].push_back(S[1-(i % 2)][j]);
                mn=min(mn, S[1-(i % 2)][j].cost);
            }
        }
        while (P[k+1].be<=i && i<=P[k+1].en)
        {
            mn=min(mn, P[k+1].cost);
            k++;
            S[i % 2].push_back(P[k]);
        }
        ANS+=mn;
    }
    fout << ANS << '\n';
    fin.close();
    fout.close();
    return 0;
}