Pagini recente » Cod sursa (job #245151) | Cod sursa (job #1649164) | Cod sursa (job #70223) | Cod sursa (job #2261063) | Cod sursa (job #1379200)
#include <fstream>
#define NMax 100010
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, v[NMax], st, mid, dr, stack[NMax], pos[NMax], lsc, rec[NMax];
int main()
{
f >> n;
for (int i = 1; i <= n; i++)
f >> v[i];
for (int i = 1; i <= n; i++) {
st = 1;
dr = lsc;
int ind;
while (st <= dr) {
mid = (st + dr) / 2;
if (stack[mid] < v[i])
st = mid + 1;
else {
dr = mid - 1;
ind = mid;
}
}
if (stack[lsc] < v[i]) {
stack[++lsc] = v[i];
pos[i] = lsc;
}
else {
stack[ind] = v[i];
pos[i] = ind;
}
}
g << lsc << "\n";
int tmp = lsc;
for (int i = n; i >= 1; i--)
if (pos[i] == lsc)
rec[lsc--] = v[i];
for (int i = 1; i <= tmp; i++)
g << rec[i] << " ";
}