Pagini recente » Cod sursa (job #1126125) | Cod sursa (job #768492) | Cod sursa (job #581781) | Cod sursa (job #1802173) | Cod sursa (job #2306922)
#include <fstream>
using namespace std;
#define NMAX 100003
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, k, ind;
int v [NMAX], prev [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])prev [i] = M [k], M [++ k] = i;
else{
ind = Bs (c [i], c);
prev [i] = M [ind - 1];
M [ind] = i;
}
}
}
void func (int poz){
if (prev [poz] > 0)func (prev [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;
}