Pagini recente » Cod sursa (job #2057868) | Cod sursa (job #2496207) | Cod sursa (job #1828530) | Cod sursa (job #2303312) | Cod sursa (job #2151285)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("scmax.in");
ofstream fo("scmax.out");
int A[100001],n,m;
vector <int> V[100001];
int cauta(int val)
{
int st=0,dr=m+1;
while((dr-st)>1)
{
int mid=(st+dr)/2;
if(V[mid][mid-1]<=val)
st=mid;
else dr=mid;
}
return dr;
}
int main()
{
fi>>n;
for(int i=1; i<=n; i++)
{
fi>>A[i];
int poz=cauta(A[i]);
V[poz]=V[poz-1];
V[poz].push_back(A[i]);
if(poz==m+1)
m++;
}
int r=m;
for(int j=0; j<m; j++)
{
if(V[m][j]==V[m][j+1])
r--;
}
fo<<r<<"\n";
for(int j=0; j<m; j++)
if(V[m][j]!=V[m][j+1])
fo<<V[m][j]<<" ";
return 0;
}