Pagini recente » Cod sursa (job #1777255) | Cod sursa (job #147930) | Cod sursa (job #592344) | Cod sursa (job #2019692) | Cod sursa (job #3157328)
#include <bits/stdc++.h>
using namespace std;
#define N_MAX 100005
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int t[N_MAX], d[N_MAX], v[N_MAX];
void read() {
f>>n;
for(int i = 1;i <= n;++i) {
f>>v[i];
}
}
void reconstruct(const int& x) {
if(t[x]) {
reconstruct(t[x]);
}
g<<v[x]<<" ";
}
void solve() {
int len = 1;
d[1] = 1;
int left, right, mid;
for(int i = 2;i <= n;++i) {
left = 1, right = len;
while(left <= right) {
mid = (left + right) >> 1;
if(v[d[mid]] >= v[i]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
if(len < left) {
++len;
d[len] = i;
t[i] = d[len - 1];
} else {
d[left] = i;
t[i] = d[left - 1];
}
}
g<<len<<'\n';
reconstruct(d[len]);
}
int main() {
read();
solve();
return 0;
}