Pagini recente » Cod sursa (job #3212413) | Istoria paginii runda/bazat | Cod sursa (job #2147342) | Cod sursa (job #2945550) | Cod sursa (job #2647860)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, x, k, seqSize, v[100001], seq[100001], index[100001], ans[100001];
int valueSearch(int l, int r, int x)
{
int pos = -1;
while(l <= r)
{
int m = (l+r)/2;
if(seq[m] < x)
l = m+1;
else
{
pos = m;
r = m-1;
}
}
return pos;
}
int main()
{
fin>>n;
for(int i = 0; i < n; i++)
fin>>v[i];
seq[0] = v[0];
index[0] = 0;
for(int i = 1; i < n; i++)
{
if(v[i] > seq[seqSize])
{
seq[++seqSize] = v[i];
index[i] = seqSize;
}
else
{
int pos = valueSearch(0, seqSize, v[i]);
seq[pos] = v[i];
index[i] = pos;
}
}
fout<<seqSize+1<<'\n';
for(int i = n-1; i >= 0 && seqSize > -1; i--)
if(index[i] == seqSize)
{
ans[k++] = v[i];
seqSize--;
}
for(int i = k-1; i >= 0; i--)
fout<<ans[i]<<" ";
return 0;
}