Pagini recente » Cod sursa (job #3199820) | Cod sursa (job #1545905) | Cod sursa (job #1144916) | Cod sursa (job #1137295) | Cod sursa (job #2306924)
#include <fstream>
using namespace std;
#define NMAX 100003
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, k, ind;
int v [NMAX], prevv [NMAX], M [NMAX];
int Bs (int X, int c [NMAX]){
int ind = 0, jump = 1 << 20;
while (jump){
if (ind + jump <= k && c [M [ind + jump]] < X)
ind += jump;
jump /= 2;
}
return ind + 1;
}
void SCM (int c [NMAX], int X){
for (int i = 1; i <= X; i ++){
if (c [M [k]] < c [i])prevv [i] = M [k], M [++ k] = i;
else{
ind = Bs (c [i], c);
prevv [i] = M [ind - 1];
M [ind] = i;
}
}
}
void func (int poz){
if (prevv [poz] > 0)func (prevv [poz]);
fout << v [poz] << " ";
}
int main (){
fin >> n;
for (int i = 1; i <= n; i ++)fin >> v [i];
SCM (v, n); fout << k << '\n';
func (M [k]);
return 0;
}