Pagini recente » Cod sursa (job #2976290) | Cod sursa (job #323808) | Cod sursa (job #2128882) | Cod sursa (job #1931265) | Cod sursa (job #3216338)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int nmax = 100005;
int dp[nmax], a[nmax], minval[nmax], sol[nmax], cnt, n;
void reconst(int last){
if(sol[last]){
reconst(sol[last]);
}
g << a[last] << ' ';
}
int main(){
f >> n;
for(int i = 1; i <= n; i++){
f >> a[i];
}
for(int i = 1; i <= n; i++){
if(a[i] > minval[cnt]){
cnt++;
minval[cnt] = a[i];
dp[cnt] = i;
if(cnt){
sol[i] = dp[cnt - 1];
}
}
else{
int poz = lower_bound(minval + 1, minval + cnt + 1, a[i]) - minval;
minval[poz] = a[i];
dp[poz] = i;
if(poz){
sol[i] = dp[poz - 1];
}
}
}
g << cnt << '\n';
reconst(dp[cnt]);
}