Pagini recente » Cod sursa (job #381374) | Cod sursa (job #1618083) | Cod sursa (job #2191307) | Cod sursa (job #313312) | Cod sursa (job #1328898)
#include <bits/stdc++.h>
#define NMax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int nr;
int A[NMax];
int best[NMax];
int previous[NMax];
void read() {
f>>n;
for (int i=1;i<=n;i++)
f>>A[i];
}
int cautbin(int x) {
int left=1, right=nr, mij;
while (left <= right) {
mij = (left+right)/2;
if (x <= A[best[mij]]) {
right = mij-1;
} else {
left = mij+1;
}
}
return left;
}
void write(int x) {
if (previous[x]) {
write(previous[x]);
}
g<<A[x]<<' ';
}
void solve() {
best[1] = nr = 1;
for (int i=2;i<=n;i++) {
if (A[i] > A[best[nr]]) {
nr++;
best[nr] = i;
previous[i] = best[nr-1];
} else {
int poz = cautbin(A[i]);
best[poz] = i;
previous[i] = best[poz-1];
}
}
g<<nr<<endl;
write(best[nr]);
}
int main() {
read();
solve();
f.close(); g.close();
return 0;
}