Pagini recente » Cod sursa (job #1277379) | Monitorul de evaluare | Cod sursa (job #2610547) | Cod sursa (job #1277001) | Cod sursa (job #1391577)
#include <cstdio>
#define NMAX 100023
#define inf 2000000023
using namespace std;
FILE *fin, *fout;
int n, v[NMAX], dr = 2, temp, maxn, p, tata[NMAX];
void afisare(int a)
{
if(tata[a] == 0)
{
printf("%d ", v[a]);
return ;
}
afisare(tata[a]);
printf("%d ", v[a]);
}
struct queue
{
int val;
int pos;
} q[NMAX];
int main()
{
fin = freopen("scmax.in", "r", stdin);
fout = freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1 ; i<= n; i++) scanf("%d", &v[i]);
for(int i = dr; i<= n; i++) q[i].val = inf;
for(int i = 1; i<= n; i++)
{
temp = dr;
while(temp > 1 && q[temp-1].val >= v[i])
{
temp--;
}
q[temp].val = v[i];
q[temp].pos = i;
tata[i] = q[temp-1].pos;
if(temp == dr) dr++;
if(temp-1 > maxn) {maxn = temp-1;p = i;}
}
printf("%d\n", maxn);
afisare(p);
printf("\n");
fclose(fin);
fclose(fout);
return 0;
}