Pagini recente » Cod sursa (job #933758) | Cod sursa (job #23516) | Cod sursa (job #59134) | Cod sursa (job #25561) | Cod sursa (job #721122)
Cod sursa(job #721122)
#include <stdio.h>
#include <list>
#include <vector>
#include <algorithm>
using namespace std;
const int dim = 100100;
int N, T, nm, R;
struct paza { int x, y, c; } A[dim];
struct inv {
int i;
vector <int> c;
} norm[dim];
list <int> L;
int cmp (inv a, inv b)
{
return a.i < b.i;
}
void elim_dubl (inv A[], int &n)
{
int i, j;
for (i = 2, j = 1; i <= n; i++)
if (A[i].i != A[j].i)
A[++j] = A[i];
n = j;
}
int cauta (int val)
{
int p = 1, u = nm, m;
while (p <= u)
{
m = (p + u) >> 1;
if (val == norm[m].i)
return m;
if (val > norm[m].i)
p = m + 1;
else
u = m - 1;
}
}
void cit ()
{
scanf ("%d%d", &N, &T);
for (int i = 1; i <= N; i++)
{
scanf ("%d%d%d", &A[i].x, &A[i].y, &A[i].c);
norm[++nm].i = A[i].x;
norm[++nm].i = A[i].y + 1;
}
sort (norm + 1, norm + 1 + nm, cmp);
elim_dubl (norm, nm);
for (int i = 1, p; i <= N; i++)
{
p = cauta (A[i].x);
norm[p].c.push_back (A[i].c);
p = cauta (A[i].y + 1);
norm[p].c.push_back (-A[i].c);
}
}
int bst ()
{
int mn = 1<<30;
for (list <int> :: iterator it = L.begin (); it != L.end (); it++)
{
mn = min (mn, *it);
}
return mn;
}
void ins (int c)
{
L.push_back (c);
}
void del (int c)
{
for (list <int> :: iterator it = L.begin (); it != L.end (); it++)
if (*it == c)
{
L.erase (it);
return;
}
}
void modif (int n)
{
for (int i = 0, x; i < norm[n].c.size(); i++)
{
x = norm[n].c[i];
if (x > 0)
ins (x);
else
del (-x);
}
}
void rez ()
{
modif (1);
for (int i = 2; i <= nm; i++)
{
R += bst () * (norm[i].i - norm[i-1].i);
modif (i);
}
printf ("%d", R);
}
int main ()
{
freopen ("gardieni.in", "r", stdin);
freopen ("gardieni.out", "w", stdout);
cit ();
rez ();
return 0;
}