Pagini recente » Cod sursa (job #2530839) | Cod sursa (job #426665) | Cod sursa (job #1059519) | Cod sursa (job #1402081) | Cod sursa (job #2590849)
#include <bits/stdc++.h>
#define N_MAX 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N, v[N_MAX];
int k, q[N_MAX], pos;
int pre[N_MAX];
int Search(int x)
{
int le = 1, ri = k, mid, best;
while (le <= ri)
{
mid = (le + ri) / 2;
if (v[q[mid]] >= x)
{
best = mid;
ri = mid - 1;
}
else
le = mid + 1;
}
return best;
}
void afis(int pos)
{
if (pre[pos])
afis(pre[pos]);
fout << v[pos] << " ";
}
int main()
{
fin >> N;
for (int i = 1; i <= N; i++)
{
fin >> v[i];
if (v[i] > v[q[k]])
pos = ++k;
else
pos = Search(v[i]);
q[pos] = i;
pre[i] = q[pos - 1];
}
fout << k << "\n";
afis(q[k]);
return 0;
}