Pagini recente » Cod sursa (job #2138349) | Cod sursa (job #389051) | Cod sursa (job #324107) | Cod sursa (job #2519600) | Cod sursa (job #2529200)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector <int> v, t;
void afisare(int nr)
{
if(t[nr] != 0)
{
afisare(t[nr]);
fout<<v[nr]<<" ";
}
else
fout<<v[nr]<<" ";
}
int CB( vector<int> v, int st, int dr, int nr)
{
while(dr-st > 1)
{
int m = (st+dr)/2;
if(v[m] > nr)
dr=m;
else
if(v[m] < nr)
st=m;
else
if(v[m] == nr)
return m;
}
return dr;
}
int main()
{
int l=1, n, x;
fin>>n;
v.resize(n+1);
t.resize(n+1);
for(int i=1; i<=n; i++)
{
fin>>x;
if(x < v[0])
v[0] = x;
else
if(x > v[l-1])
{
t[l] = l-1;
v[l++] = x;
}
else
{
int k = CB(v, -1, l-1, x);
v[k] = x;
t[k] = k-1;
}
}
fout<<l-1<<"\n";
afisare(l-1);
return 0;
}