Pagini recente » Monitorul de evaluare | Cod sursa (job #1341541) | Statistici Sandu Irina (irinaS13) | Cod sursa (job #2370394) | Cod sursa (job #2355805)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int n;
int v[maxn], maxx;
int cap[maxn];
inline int caut(int nr) {
int pas = 1 << 18, r = 0;
while(pas) {
if(r + pas <= maxx && v[cap[r + pas]] < v[nr])
r += pas;
pas >>= 1;
}
return r;
}
int prev1[maxn];
vector <int> aa;
int main() {
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin >> n;
int st = 1;
maxx = 0;
prev1[1] = 0;
for(int i = 1;i <= n;i++) {
cin >> v[i];
int nr = caut(i);
cap[nr + 1] = i;
prev1[i] = cap[nr];
if(nr + 1 > maxx) {
maxx = nr + 1;
st = i;
}
}
cout << maxx << "\n";
while(st != 0) {
aa.push_back(st);
st = prev1[st];
}
for(int i = aa.size() - 1;i >= 0;i--)
cout << v[aa[i]] << ' ';
return 0;
}