Mai intai trebuie sa te autentifici.
Cod sursa(job #1857961)
Utilizator | Data | 26 ianuarie 2017 21:23:31 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.83 kb |
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100005], i, j, n, lm, x;
int bst[100005], pb[100005], sol[100005];
int cb(int x) {
int st = 1, dr = lm, m;
while (st <= dr) {
m = (st+dr)/2;
if (x >= bst[i])
dr = m-1;
else st = m+1;
}
return st;
}
int main() {
f >> n;
for (i = 1; i <= n; i++) {
f >> a[i];
if (a[i] > bst[lm])
lm++, x = lm;
else {
x = cb(a[i]);
if (x > lm)
lm++;
}
bst[x] = a[i];
pb[i] = x;
}
g << lm << '\n';
for (i = n; i >= 1&&lm>0;i--)
if (pb[i]==lm)
sol[++j] = a[i],lm--;
for (i = j;i>=1;i--)
g << sol[i] << ' ';
return 0;
}