Pagini recente » Cod sursa (job #478828) | Cod sursa (job #820142) | Cod sursa (job #1018158) | Cod sursa (job #344868) | Cod sursa (job #3201635)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int Vmax = 1e6+3;
int a[Vmax], minVal[Vmax], pre[Vmax], dp[Vmax], sol;
void reconst(int last){
if(pre[last])
reconst(pre[last]);
fout << a[last] << " ";
}
int main(){
int n;
fin >> n;
for(int i=1;i<=n;i++)
fin >> a[i];
for(int i=1;i<=n;i++){
if(minVal[sol]<a[i]){
sol++;
minVal[sol]=a[i], dp[sol]=i;
if(sol) pre[i]=dp[sol-1];
}
else {
int poz = lower_bound(minVal+1, minVal+sol+1, a[i]) - minVal;
minVal[poz]=a[i], dp[poz]=i;
if(poz)
pre[i]=dp[poz-1];
}
}
fout << sol << "\n";
reconst(dp[sol]);
return 0;
}