Pagini recente » Cod sursa (job #3309749) | Cod sursa (job #213092) | Monitorul de evaluare | Cod sursa (job #780148) | Cod sursa (job #2189541)
#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], k, dp[DIM];
int main(int argc, const char * argv[]) {
in>>n;
for(int i = 1; i <= n; ++ i)
in>>v[i];
dp[1] = 1;
for(int i = 2; i <= n; ++ i){
int st = 1, dr = k;
while(st <= dr){
int mid = (st + dr) / 2;
if(v[dp[mid]] < v[i])
st = mid + 1;
else
dr = mid - 1;
}
if(st > k)
++ k;
dp[st] = i;
t[i] = dp[st - 1];
}
out<<k<<'\n';
vector<int> sol;
k = dp[k];
while(k){
sol.push_back(v[k]);
k = t[k];
}
for(int i = sol.size() - 1; i >= 0; -- i)
out<<sol[i]<<" ";
return 0;
}