Pagini recente » Cod sursa (job #1911805) | Cod sursa (job #24631) | Cod sursa (job #633391) | Cod sursa (job #1161456) | Cod sursa (job #1317333)
#include<fstream>
using namespace std;
ifstream fin("usor.in");
ofstream fout("usor.out");
#define MAXN 100001
#define INF 2000000002
long MAXIME[MAXN], SCM[MAXN], V[MAXN];
int n;
void compute() {
SCM[n] = 1;
long lscm = 1;
MAXIME[1] = V[n];
MAXIME[0] = INF;
for(int i=n-1; i; i--) {
long t = lscm;
while(MAXIME[t] <= V[i]) t--;
SCM[i] = t + 1;
MAXIME[SCM[i]] = max(MAXIME[SCM[i]], V[i]);
lscm = max(lscm, SCM[i]);
}
fout<<lscm<<'\n';
long last = 0;
for(int i=1; i<=n; i++) {
if(SCM[i] == lscm && last < V[i]) {
fout<<V[i]<<" ";
lscm--;
last = V[i];
}
}
}
int main() {
fin>>n;
for(int i=1; i<=n; i++) {
fin>>V[i];
}
compute();
return 0;
}