Pagini recente » Cod sursa (job #2399937) | Cod sursa (job #451957) | Cod sursa (job #1319198) | Cod sursa (job #2223094) | Cod sursa (job #1976923)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100002
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[NMAX], D[NMAX], val[NMAX], pred[NMAX], poz[NMAX];
void remake(int poz) {
if (poz == 0)
return;
remake(pred[poz]);
fout << v[poz] << " ";
}
int cbinara(int st, int dr, int x) {
int mid, sol = 0;
while (st <= dr) {
mid = (st + dr) >> 1;
if (val[mid] < x) {
sol = mid;
st = mid + 1;
}
else
dr = mid - 1;
}
return sol;
}
int main() {
int N;
fin >> N;
for (int i = 1; i <= N; ++i) {
fin >> v[i];
val[i] = INT_MAX;
}
int bestVal = 0, bestPoz = 0;
for (int i = 1; i <= N; ++i) {
int p = cbinara(0, bestVal, v[i]);
D[i] = 1 + p;
pred[i] = poz[p];
if (val[D[i]] > v[i]) {
val[D[i]] = v[i];
poz[D[i]] = i;
}
if (D[i] > bestVal) {
bestVal = D[i];
bestPoz = poz[D[i]];
}
}
fout << bestVal << "\n";
remake(bestPoz);
return 0;
}