Pagini recente » Cod sursa (job #1851354) | Cod sursa (job #2434281) | Cod sursa (job #1927599) | Cod sursa (job #530435) | Cod sursa (job #611137)
Cod sursa(job #611137)
#include<iostream>
#include<fstream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<stack>
#define MAXN 100000
using namespace std;
int A[MAXN];
int B[MAXN];
int P[MAXN];
int PREV[MAXN];
int p;
int N;
int main() {
ifstream in("scmax.in");
ofstream out("scmax.out");
in >> N;
PREV[0] = -1;
P[0] = -1;
for(int i = 0; i < N; i++) {
in >> A[i];
}
for(int i = 0; i < N; i++) {
int* pos = upper_bound(B, B + p, A[i]);
if(*(pos-1) == A[i]) continue;
*pos = A[i];
PREV[i] = (i==0)?-1:PREV[P[pos - B]];
P[pos - B] = i;
if(pos - B >= p) {
PREV[i] = (i==0)?-1:P[pos - B - 1];
p++;
}
}
out << p << "\n";
stack<int> S;
for(int i = P[p-1]; i >= 0; i = PREV[i]) {
printf("%d \n", i);
S.push(A[i]);
}
for(int i = 0; i < p; i++) {
printf("(%d - %d - %d)", B[i], P[i], PREV[P[i]]);
int el = S.top();
S.pop();
out << el << " ";
}
}