Pagini recente » Cod sursa (job #1360910) | Cod sursa (job #2087027) | Cod sursa (job #1392540) | Cod sursa (job #2145505) | Cod sursa (job #1593505)
#include <iostream>
#include <fstream>
#include <stack>
#include <algorithm>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
stack <int> k;
int v[100002],n,o[100002],P[100002];
int main() {
int i,j;
fin >> n;
for(i=1;i<=n;i++)
fin >> v[i];
int ct=1,*p,poz;
o[1]=v[1];
for(i=1;i<=n;i++) {
if(v[i]>o[ct]) {
o[++ct]=v[i];
P[i]=ct;
}
else {
p=upper_bound(o+1,o+ct+1,v[i]);
poz=p-o;
o[poz]=v[i];
P[i]=poz;
}
//cout << ct << ' ' << poz << '\n';
}
/*for(int ii=1;ii<=ct;ii++)
cout << o[ii] << ' ';
cout << endl;*/
for(i=n;i>=1;i--)
if(P[i]==ct) {
//cout << v[i] << ' ';
k.push(v[i]);
break;
}
int aux=i;
for(;i>=1;i--) {
if(P[i]==P[aux]-1 && v[i]<v[aux]) {
//cout << v[i] << ' ';
k.push(v[i]);
aux=i;
}
}
fout << ct << endl;
while(!k.empty()) {
fout << k.top() << ' ';
k.pop();
}
return 0;
}