Mai intai trebuie sa te autentifici.
Cod sursa(job #2265046)
Utilizator | Data | 20 octombrie 2018 15:49:02 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 50 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.86 kb |
#include <cstdio>
#include <list>
#include <set>
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n;
scanf("%d", &n);
int a[2 + n];
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
std::set<int> ord;
int pos[2 + n];
pos[1] = 1;
ord.insert(a[1]);
for (int i = 2; i <= n; i++) {
auto it = ord.lower_bound(a[i]);
if (it != ord.end()) {
ord.erase(it);
ord.insert(a[i]);
//pos[i] = std::distance(ord.begin(), it) + 1;
} else {
ord.insert(a[i]);
// pos[i] = ord.size();
}
}
printf("%d\n", ord.size());
std::list<int> show;
/* int val = ord.size(), i = n;
while (i > 0 && val > 0) {
if (pos[i] == val) {
val--;
show.push_front(i);
}
i--;
}
for (int i : show)
printf("%d ", a[i]);*/
return 0;
}