Pagini recente » Cod sursa (job #75850) | Cod sursa (job #986707) | Cod sursa (job #472102) | Cod sursa (job #1677468) | Cod sursa (job #2493621)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[100001], x[100001], pred[100001];
int n, l;
int cautb(int val){
if(val > v[x[l]])
return l+1;
int st = 1, dr = l, m;
while(st < dr){
m = (st+dr)/2;
if(v[x[m]] >= val)
dr = m;
else
st = m + 1;
}
return st;
}
void subsir(int p)
{
if (p == 0)
{
return;
}
subsir(pred[p]);
fout << v[p] << ' ';
}
int main(){
int i, j, maxx = 0, st, dr;
fin >> n;
for(i = 1; i <= n; ++i)
fin >> v[i];
x[++l] = 1;
for(i = 2; i <= n; ++i){
j = cautb(v[i]);
pred[i] = x[j - 1];
if(j > l)
l = j;
x[j] = i;
}
/*
for(i = 2; i <= n; ++i){
if(i-pred[i]+1 > maxx){
maxx = i-pred[i]+1;
st = pred[i];
dr = i;
}
}
*/
fout << l << '\n';
/*
for(i = 1; i <= l; ++i)
fout << x[i] << " ";
*/
subsir(x[l]);
return 0;
}