Cod sursa(job #38776)

Utilizator moga_florianFlorian MOGA moga_florian Data 26 martie 2007 08:41:43
Problema Ograzi Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#define NMAX 50005

int x[NMAX],y[NMAX];

int main()
{
FILE *fin=fopen("ograzi.in","r"),
     *fout=fopen("ograzi.out","w");

int N,M,W,H,i,j,k;

fscanf(fin,"%d%d%d%d",&N,&M,&W,&H);

for(i=1;i<=N;i++)
  {
  fscanf(fin,"%d%d",&x[i],&y[i]);
  j=i;
  while(j/2 && (x[j/2]<x[j] || (x[j/2]==x[j] && y[j/2]<y[j])) )
     {
     x[j/2]^=x[j];
     x[j]^=x[j/2];
     x[j/2]^=x[j];
     
     y[j/2]^=y[j];
     y[j]^=y[j/2];
     y[j/2]^=y[j];
     j/=2;
     }
  }
  
i=N;
while(i>1)
 {
 x[1]^=x[i];
 x[i]^=x[1];
 x[1]^=x[i];
 y[1]^=y[i];
 y[i]^=y[1];
 y[1]^=y[i];
 i--;
 
 j=1;
 while(1)
  {
  k=j<<1;       
  if(k>i) break;
  if(k+1<=i && (x[k+1]>x[k] || (x[k+1]==x[k] && y[k+1]>y[k])) ) k++;
  if(x[j]>=x[k] || (x[j]==x[k] && y[j]>=y[k]) ) break;
  
  x[j]^=x[k];
  x[k]^=x[j];
  x[j]^=x[k];
  
  y[j]^=y[k];
  y[k]^=y[j];
  y[j]^=y[k];
  j=k;
  }          
 }
 
fclose(fin);
fclose(fout);
return 0;
}