Cod sursa(job #125325)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 20 ianuarie 2008 12:34:54
Problema Gardieni Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasa a 10-a Marime 1 kb
#include<stdio.h>
FILE*fin=fopen("gardieni.in","r");
FILE*fout=fopen("gardieni.out","w");
#define maxt (1<<20)
long t,a,b,c,n;
long long v[2*maxt];
void build(long nod,long st,long dr)
{
  if(st==dr) v[nod]=-1;
  else
  {
    long mij=(st+dr)>>1;
    long ls=nod<<1;
    long rs=ls+1;
    v[nod]=-1;
    build(ls,st,mij);
    build(rs,mij+1,dr);
  }
}
void update(long nod,long st,long dr)
{
  if(st==dr)
  {
    if(v[nod]==-1) v[nod]=c;
    else if(v[nod]>c) v[nod]=c;
  }
  else
  {
    long mij=(st+dr)>>1;
    long ls=nod<<1;
    long rs=ls+1;
    if(a<=mij) update(ls,st,mij);
    if(b>=mij+1) update(rs,mij+1,dr);
    if(v[ls]!=-1&&v[rs]!=-1) if(v[nod]==-1) v[nod]=v[ls]+v[rs];
			     else if(v[nod]>v[ls]+v[rs]) v[nod]=v[ls]+v[rs];
  }
}
int main()
{
long i;
fscanf(fin,"%ld",&n);
fscanf(fin,"%ld",&t);
build(1,1,t);
for(i=1;i<=n;i++)
{
  fscanf(fin,"%ld" "%ld" "%ld",&a,&b,&c);
  update(1,1,t);
}
fprintf(fout,"%lld",v[1]);
fclose(fin);
fclose(fout);
return 0;}