Pagini recente » Cod sursa (job #2924239) | Cod sursa (job #1829970) | Cod sursa (job #2663757) | Cod sursa (job #2747604) | Cod sursa (job #2930632)
#include <fstream>
#include <vector>
using namespace std;
const int INF = 30000;
int caut_bin(vector<int> &q, int &len, int val)
{
int st = 1, dr = len+1;
while(st < dr)
{
int m = (st + dr) / 2;
if(val == q[m])
return m;
else if(val < q[m])
dr = m;
else
st = m+1;
}
if (dr > len)
q[++len+1] = INF;
q[st] = val;
return st;
}
int main()
{
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
fin >> n;
vector<int> v(n+1);
for(int i = 1; i <= n; i++)
fin >> v[i];
vector<int> p(n + 1), q(n + 1);
int len = 0;
q[1] = INF;
for (int i = 1; i <= n; i++)
p[i] = caut_bin(q, len, v[i]);
vector<int> s(len+1);
int j = n;
for (int i = len; i >= 1; i--)
{
while (p[j] != i)
j--;
s[i] = v[j];
}
fout << len << '\n';
for(int i = 1; i <= len; i++)
fout << s[i] << ' ';
return 0;
}