Pagini recente » Cod sursa (job #3198291) | Cod sursa (job #1594626) | Istoria paginii utilizator/oltean_florin | Cod sursa (job #465955) | Cod sursa (job #2974257)
#include<bits/stdc++.h>
using namespace std;
const int N = 100009;
int v[N], idxs[N], len, n, pos[N], q[N], sol[N];
ifstream in ("scmax.in");
ofstream out("scmax.out");
// auto& in = cin;
// auto& out = cout;
void read()
{
in>>n;
for(int i=0;i<n;i++)
in>>v[i];
}
void show()
{
out<<"q[]: ";
for(int i=0;i<len;i++)
out<<q[i]<<' ';
out<<endl;
out<<"p[]: ";
for(int i=0;i<n;i++)
out<<pos[i]<<' ';
out<<endl;
}
void rebuild()
{
int s = len - 1;
// out<<"s: "<<s<<endl;
for(int i=n-1;i>=0;i--)
if(pos[i] == s)
sol[s--] = v[i];
}
int main(){
read();
q[0] = v[0];
len = 1;
pos[0] = 0;
// show();
for(int i=1; i<n; i++)
{
int p = upper_bound(q, q+len, v[i]) - q;
if(q[p-1] == v[i]) p--;
if(p == len) len++;
q[p] = v[i];
pos[i] = p;
// show();
}
out<<len<<endl;
// show();
rebuild();
for(int i=0;i<len;i++)
out<<sol[i]<<' ';
out<<endl;
return 0;
}