//--------------------------------------------------------------------------- #include #include //--------------------------------------------------------------------------- const unsigned int MAXIMO = 60000; void GeneraAleatorio(char *Entrada,int N) { FILE *Output; unsigned int Ini,Fin; int i; Output = fopen(Entrada,"w+t"); fprintf(Output,"%d\n",N); for(i = 0; i < N; i++) { Ini = random(MAXIMO - 1); Fin = random(MAXIMO - Ini - 1); Fin += Ini+1; fprintf(Output,"%u %u\n",Ini+1,Fin+1); } fclose(Output); } ///************************************************************************** void QuickSort(unsigned int *A,int Lower,int Higher) { int Lo, Hi, Mid, T; if( Lower >= Higher ) { return; } Lo = Lower; Hi = Higher; Mid = A[(Lo+Hi)/2]; do { while( A[Lo] < Mid ) { Lo++; } while( A[Hi] > Mid ) { Hi--; } if( Lo <= Hi ) { // Intercambiamos los extremos. T = A[Lo]; A[Lo] = A[Hi]; A[Hi] = T; Lo++; Hi--; } } while (Lo < Hi); QuickSort(A,Lower,Hi); QuickSort(A,Lo,Higher); } ///************************************************************************** void Resuelve(int N,unsigned int *Ini,unsigned int *Fin) { FILE *Output; int PosIntervalo; unsigned int i,Flag,Maximo,Count,PosIni,PosFin; unsigned int *Intervalo; QuickSort(Ini,0,N-1); QuickSort(Fin,0,N-1); Intervalo = new unsigned int[20000]; PosIni = 0; PosFin = 0; Maximo = 0; Count = 0; Flag = 0; PosIntervalo = 0; for(i = 0; i < Fin[N-1]+1; i++) { while( PosIni < N && Ini[PosIni] == i ) { PosIni++; Count++; } while( PosFin < N && Fin[PosFin] == i ) { PosFin++; Count--; } if( Maximo < Count ) { PosIntervalo = 1; Intervalo[0] = i; Maximo = Count; Flag = 1; } else if( Maximo == Count && Flag == 0 ) { Intervalo[PosIntervalo] = i; PosIntervalo++; Flag = 1; } else if( Maximo > Count && Flag == 1 ) { Intervalo[PosIntervalo] = i; PosIntervalo++; Flag = 0; } } Output = fopen("Output.txt","w+t"); fprintf(Output,"%u\n",Maximo); for(i = 0; i < PosIntervalo; i+=2) { fprintf(Output,"%u %u ",Intervalo[i],Intervalo[i+1]); } delete[] Intervalo; fclose(Output); } ///************************************************************************** int main(void) { FILE *Input; int i,N; unsigned int *Ini,*Fin; //randomize(); //GeneraAleatorio("input9.txt",10000); Input = fopen("Input.txt","r+t"); fscanf(Input,"%d",&N); Ini = new unsigned int[N]; Fin = new unsigned int[N]; for(i = 0; i < N; i++) { fscanf(Input,"%u %u",&Ini[i],&Fin[i]); } fclose(Input); Resuelve(N,Ini,Fin); delete[] Ini; delete[] Fin; return 0; } //---------------------------------------------------------------------------