Cod sursa(job #1013237)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 20 octombrie 2013 17:40:16
Problema Gardieni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#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;
}