Pagini recente » Cod sursa (job #2433487) | Cod sursa (job #1187451) | Cod sursa (job #1143233) | Cod sursa (job #616693) | Cod sursa (job #1242352)
#include <fstream>
#define DIM 100100
using namespace std;
ifstream fin("scm.in");
ofstream fout("scm.out");
int st,dr,mid,v[DIM],n,i,k,t[DIM],d[DIM];
void trace(int x){
if(x){
trace(t[x]);
fout << v[x] << " ";
}
}
int main()
{
fin >> n;
for(i = 1; i<= n; i ++)
fin >> v[i];
d[1] = 1;
k = 1;
for(i = 2; i <= n; i ++){
st = 1; dr = k;
while(st <= dr){
mid = (st + dr) / 2;
if(v[i] <= v[ d[mid] ])
dr = mid - 1;
else
st = mid + 1;
}
if(st > k){
k ++;
d[k] = i;
t[i] = d[k - 1];
}
else {
if( v[ d[st] ] > v[i] )
{
d[st] = i;
t[i] = d[st - 1];
}
}
}
fout << k << '\n';
trace(d[k]);
return 0;
}