Pagini recente » Cod sursa (job #3356847) | Cod sursa (job #711334) | Cod sursa (job #3324868) | Cod sursa (job #93858) | Cod sursa (job #3349175)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int nmax = 1e5+2;
void ans(int ind);
int n, v[nmax], best[nmax], pre[nmax], lmax;
int cauta(int ind);
int main()
{
fin>>n;
for(int i = 1; i <= n; ++i)
fin>>v[i];
v[0] = INT_MAX;
for(int i = 1; i <= n; ++i)
{
int l = cauta(i);
best[l] = i;
pre[i] = best[l-1];
lmax = max(lmax, l);
}
fout<<lmax<<"\n";
ans(best[lmax]);
return 0;
}
void ans(int ind)
{
if(ind == 0)
return;
ans(pre[ind]);
fout<<v[ind]<<" ";
}
int cauta(int ind)
{
int st = 1, dr = n;
while(st <= dr)
{
int mijl = (st + dr) / 2;
if(v[best[mijl]] >= v[ind])
dr = mijl - 1;
else
st = mijl + 1;
}
return st;
}