Pagini recente » Cod sursa (job #2281706) | Cod sursa (job #2242360) | Cod sursa (job #66255) | Cod sursa (job #1897756) | Cod sursa (job #544211)
Cod sursa(job #544211)
#include <iostream>
#include <cstdio>
#define NMAX 100005
using namespace std;
int V[NMAX], N, Q[NMAX], P[NMAX], S[NMAX], lenP, lenQ;
void read(void)
{
FILE *f = fopen("scmax.in", "r");
fscanf(f, "%d", &N);
for(int i = 1; i <= N; ++i)
fscanf(f, "%d", &V[i]);
fclose(f);
}
void insert(int x)
{
for(int i = 1; i <= lenQ; ++i)
if(x <= Q[i])
{
Q[i] = x;
P[++lenP] = i;
return;
}
Q[++lenQ] = x;
P[++lenP] = lenQ;
}
void solve(void)
{
P[1] = lenQ = lenP = 1, Q[1] = V[1];
for(int i = 2; i <= N; ++i)
insert(V[i]);
for(int i = lenQ, j = lenP; i; --i)
{
while(P[j] != i)
--j;
S[i] = j;
}
}
void print(void)
{
FILE *g = fopen("scmax.out", "w");
fprintf(g, "%d\n", lenQ);
for(int i = 1; i <= lenQ; ++i)
fprintf(g, "%d ", V[ S[i] ]);
fclose(g);
}
int main(void)
{
read();
solve();
print();
return 0;
}