Pagini recente » Cod sursa (job #251156) | Cod sursa (job #260138) | Cod sursa (job #1338165) | Cod sursa (job #2127109) | Cod sursa (job #2189536)
#include <fstream>
#include <vector>
#include <algorithm>
#define DIM 100002
using namespace std;
ifstream in ("scmax.in");
ofstream out("scmax.out");
int n, v[DIM], t[DIM];
vector<int> dp;
bool cmp(int a, int b){
return v[a] < v[b];
}
int main(int argc, const char * argv[]) {
in>>n;
for(int i = 1; i <= n; ++ i)
in>>v[i];
dp.push_back(1);
for(int i = 2; i <= n; ++ i){
auto poz = upper_bound(dp.begin(), dp.end(), i, cmp);
if(poz == dp.end()){
if(*poz < v[i]){
dp.push_back(i);
}
else
(*poz) = i;
}
else
(*poz) = i;
t[i] = *(poz - 1);
}
out<<dp.size()<<'\n';
int i = dp.back();
vector<int> sol;
while(t[i]){
sol.push_back(v[i]);
i = t[i];
}
for(int i = sol.size() - 1; i >= 0; -- i)
out<<sol[i]<<" ";
return 0;
}