Pagini recente » Cod sursa (job #2764997) | Cod sursa (job #989550) | Cod sursa (job #2561133) | Cod sursa (job #440531) | Cod sursa (job #2150179)
#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 V[100001];
int cauta(int val)
{
int st=0,dr=m+1;
while((dr-st)>1)
{
int mid=(st+dr)/2;
if(V[mid][0]<=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]);
if(poz==m+1)
{
V[m+1].push_back(A[i]);
if(m+1!=1)
for(int i=0;i<=V[m].size();i++)
V[m+1].push_back(V[m][i]);
m++;
}
else
if(poz==0)
{
V[1].clear();
V[1].push_back(A[i]);
}
else
{
V[poz].clear();
V[poz].push_back(A[i]);
if(poz-1>0)
V[poz]=V[poz-1];
}
}
fo<<m-1<<"\n";
for(int i=V[m].size();i>=0;i--)
{
if(V[m][i]!=0)
fo<<V[m][i]<<" ";
}
return 0;
}