Pagini recente » Cod sursa (job #680214) | Cod sursa (job #279109) | Cod sursa (job #2774190) | Cod sursa (job #2611993) | Cod sursa (job #2431986)
#include <bits/stdc++.h>
#define maxim 100009
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
/*ifstream f("../dt.in");
ofstream g("../dt.out");*/
int dp[maxim],fin[maxim],len;
int v[maxim],n;
void sir(int x)
{
if (fin[x]==0)
{
g<<v[x]<<" ";
return;
}
sir(fin[x]);
g<<v[x]<<" ";
}
int bs(int x)
{
int i=1;
int ans;
int j=len;
while (i<=j)
{
int m=(i+j)/2;
if (v[x]==v[dp[m]])
return m;
if (v[x]<v[dp[m]])
j=m-1;
else i=m+1;
}
return i;
}
int main()
{
dp[1]=1;
f>>n;
for (int i=1;i<=n;i++)
f>>v[i];
len=0;
for (int i=1;i<=n ;i++)
{
if (v[i]>v[dp[len]])
{
fin[i]=dp[len];
dp[++len]=i;
}
else
{
//cout<<"Da"<<endl;
int x=bs(i);
dp[x]=i;
fin[i]=dp[x-1];
}
}
g<<len<<'\n';
sir(dp[len]);
}