Pagini recente » Cod sursa (job #1660360) | Cod sursa (job #1591919) | Cod sursa (job #2490697) | Cod sursa (job #108093) | Cod sursa (job #1525110)
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define Infinity 30000
typedef int Vector[10001];
Vector V, P, Q, *S;
int N,Len; // Len = lungimea vectorului Q
void ReadData(void) {
FILE *F=fopen("scmax.in","rt") ;
int i ;
fscanf(F,"%d", &N);
for(i=1;i<=N;i++)
fscanf(F,"%d",&V[i]);
fclose(F);
}
int Insert(int K, int Lo, int Hi) {
int mid = (Lo+Hi)/2;
if (Lo==Hi) {
if (Hi>Len) Q[++Len+1]=Infinity;
Q[Lo]=K;
return Lo;
}
else if (K<Q[mid]) {
return Insert(K,Lo,mid);
}
else return Insert(K,mid+1,Hi);
}
void BuildPQ(void) {
Len=0;
Q[1]=Infinity;
for(int i=1; i<N;i++) {
P[i]=Insert(V[i],1,Len+1);
}
}
void BuildS(void){
int i,K=N;
for (i=Len;i;i--) {
while (P[K]!=i) K-- ;
Q[i] = V[K]; // i use the Q since i have no use for him but i should have use the S-solution
}
}
void WriteSolution(void) {
FILE *f=fopen("scmax.out","wt");
int i;
fprintf(f,"%d\n",Len);
for(i=1;i<=Len; i++)
fprintf(f,"%d",Q[i]);
fclose(f);
}
void main()
{
ReadData();
BuildPQ();
BuildS();
WriteSolution();
}