Pagini recente » Cod sursa (job #2293644) | Cod sursa (job #1758620) | Cod sursa (job #2116846) | Cod sursa (job #2268517) | Cod sursa (job #1766632)
#include <fstream>
using namespace std;
int k,n,i,j,p,u,mid,x,v[100001],d[100001],ok,w[100001],t[100001];
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int main (){
fin>>n;
for (i=1;i<=n;i++){
fin>>v[i];
}
d[1] = 1;
k = 1;
for (i=2;i<=n;i++){
// cautam cel mai mic nr mai mare decat v[i] in d,binar;
// am v[d[i]] cu i de la 1 LA k un sir sortat si caut in el pozitia primei valori
// mai mare decat v[i];
p = 1;
u = k;
ok = 0;
while (p<=u){
mid = (p+u)/2;
if (v[d[mid]] < v[i])
p = mid+1;
else
u = mid-1;
}
if (p == k+1){
k++;
//p = k;
//d[p] = i;
}
d[p] = i;
t[i] = d[p-1];
}
fout<<k<<"\n";
x = d[k];
int k2 = 0;
while (x != 0){
w[++k2] = v[x];
x = t[x];
}
for (i=k2;i>=1;i--)
fout<<w[i]<<" ";
return 0;
}