Pagini recente » Cod sursa (job #1583996) | Cod sursa (job #2118438) | Cod sursa (job #2325453) | Cod sursa (job #3293682) | Cod sursa (job #2409714)
#include <fstream>
#include <vector>
#define DIM 100002
using namespace std;
ifstream in ("scmax.in");
ofstream out("scmax.out");
int n, k = 1;
int v[DIM], dp[DIM], t[DIM];
vector<int> sol;
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;
int dr = k;
while(st <= dr){
int mid = (st + dr) / 2;
if(v[dp[mid]] < v[i]){
st = mid + 1;
}
else{
dr = mid - 1;
}
}
dp[st] = i;
t[i] = dp[st - 1];
if(st > k)
k = st;
}
int crt = dp[k];
while(crt != 0){
sol.push_back(v[crt]);
crt = t[crt];
}
out<<sol.size()<<'\n';
for(int i = sol.size() - 1; i >= 0; -- i)
out<<sol[i]<<" ";
return 0;
}