Pagini recente » Cod sursa (job #2548791) | Cod sursa (job #346525) | Cod sursa (job #3276261) | Cod sursa (job #481024) | Cod sursa (job #2706560)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100001], p[100001], q[100001];
int n, l;
void print(int L, int ind){
while(q[ind] != L) ind--;
if(L - 1 > 0) print(L - 1, ind - 1);
g << v[ind] << " ";
}
int main(){
f >> n;
for(int i = 1;i <= n;i++)
f >> v[i];
p[++l] = v[1], q[1] = 1;
for(int i = 2;i <= n;i++){
if(v[i] > p[l]) p[++l] = v[i], q[i] = l;
else{
int st = 1, dr = l, x = l;
while(st <= dr){
int mij = (st + dr) / 2;
if(p[mij] >= v[i]) dr = mij - 1, x = mij;
else st = mij + 1;
}
p[x] = v[i], q[i] = x;
}
}
g << l << "\n";
print(l, n);
}