Pagini recente » Cod sursa (job #1055805) | Cod sursa (job #1578593) | Cod sursa (job #2795594)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n, v[1002], rez[1002];
vector<int> lg;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
lg.emplace_back(1e9);
for (int i = n; i >= 1; i--) {
if (v[i] <= lg[lg.size() - 1]) {
lg.emplace_back(v[i]);
rez[i] = lg.size() - 1;
}
else {
int st = 1;
int dr = lg.size() - 1;
int mid = (dr + st) / 2;
while (st + 1 < dr) {
mid = (dr + st) / 2;
if (lg[mid] <= v[i]) {
dr = mid;
}
else {
st = mid;
}
}
if (lg[dr] <= v[i]) {
rez[i] = dr;
lg[dr] = v[i];
}
}
}
int maxi = -1;
for (int i = 1; i <= n; i++) {
if (maxi < rez[i]) {
maxi = rez[i];
}
}
cout << lg.size()-2 << '\n';
int prev = -1;
int cnt = lg.size() - 1;
rez[n] = 1;
int ok = 0;
for (int i = 1; i <= n; i++) {
if (rez[i] == 1) {
ok = 1;
}
}
if (ok == 0) {
return 0;
}
int cntalt = 0;
for (int i = 1; i <= n; i++) {
if (rez[i] == cnt && v[i] > prev) {
cout << v[i] << ' ';
prev = v[i];
cntalt++;
cnt--;
}
}
if (cnt == 1 || cntalt!=lg.size()-2) {
cout << -11;
}
}