Pagini recente » Cod sursa (job #1141009) | Cod sursa (job #33580) | Cod sursa (job #3280569) | Cod sursa (job #1590772) | Cod sursa (job #1972099)
#include<fstream>
#define N 100001
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int v[N], w[N], t[N];
int* Solve(int v[], int n)
{
int* sol = new int[n +1];
w[0] = w[1] = 1;
for(int i = 2; i <= n; ++i)
{
int first = 1, last = w[0];
while(first <= last)
{
int mid = (first + last) / 2;
if(v[w[mid]] < v[i])
{
first = mid + 1;
}
else
{
last = mid - 1;
}
}
w[first] = i;
if(first > w[0])
{
w[0] = first;
}
t[i] = w[last];
}
int last = w[w[0]];
for(int i = 1; i <= w[0]; ++i)
{
sol[i] = v[last];
last = t[last];
}
return sol;
}
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; ++i)
{
cin >> v[i];
}
int *sol;
sol = Solve(v, n);
cout << w[0] << endl;
for(int i = w[0]; i; --i)
{
cout << sol[i] << " ";
}
cin.close();
cout.close();
return 0;
}