Pagini recente » Cod sursa (job #2593736) | Cod sursa (job #2668712) | Cod sursa (job #642823) | Cod sursa (job #1814685) | Cod sursa (job #1414255)
#include <fstream>
#define NMax 100010
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, v[NMax], stack[NMax], rec[NMax], lsc, sol[NMax];
int binSrc(int st, int dr, int elem)
{
int sol = -1, mid = 0;
while (st <= dr) {
mid = (st + dr) / 2;
if (elem > stack[mid])
st = mid + 1;
else {
dr = mid - 1;
sol = mid;
}
}
return sol;
}
int main()
{
f >> n;
for (int i = 1; i <= n; i++)
f >> v[i];
for (int i = 1; i <= n; i++) {
int ind = binSrc(1, lsc, v[i]);
if (ind == -1) {
stack[++lsc] = v[i];
rec[i] = lsc;
}
else {
stack[ind] = v[i];
rec[i] = ind;
}
}
g << lsc << "\n";
int len = lsc;
for (int i = n; i >= 1; i--) {
if (len == rec[i]) {
sol[len] = v[i];
len--;
}
}
for (int i = 1; i <= lsc; i++)
g << sol[i] << " ";
}