Pagini recente » Cod sursa (job #1133864) | Cod sursa (job #700025) | Cod sursa (job #1463375) | Cod sursa (job #3334180) | Cod sursa (job #3324208)
/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
f>>n;
vector<int> v(n), best(n), sir(n);
for(int i=0; i<n; i++)
{
f>>v[i];
}
/* for(int i=0; i<n-1; i++)
{
for(int j=i+1; j<n; j++)
{
if(v[i]<v[j])
{
best[j] = max(best[j], best[i] + 1);
}
}
}*/
sir[0]=v[0];
int dr=0,m,st;
for(int i=1; i<n; i++)
{
bool ok=0;
st=0;
if(v[i]>sir[dr])
{
dr++;
best[i]=dr;
sir[dr]=v[i];
}
else
{
while(st<dr)
{
m=(st+dr)/2;
if(sir[m]==v[i])
{
best[i]=m;
ok=1;break;
}
else
{
if(sir[m]>v[i])
{
dr=m-1;
}
else
{
st=m+1;
}
}
}
}
if(ok==0)
{
if(v[i]<sir[st])
{
sir[st]=v[i];
best[i]=st;
}
}
}
for(int i=0; i<n-1; i++)
{
}
int aux=0;
for(int i=0; i<n; i++)
{
if(aux<best[i])
{
aux=best[i];
}
}
g<<aux+1<<endl;
vector<int> v2;
for(int i=n-1; i>=0; i--)
{
if(best[i]==aux)
{
v2.push_back(v[i]);
aux--;
}
}
for(int i=v2.size()-1; i>=0; i--)
{
g<<v2[i]<<" ";
}
return 0;
}