Pagini recente » Cod sursa (job #2339731) | Cod sursa (job #1477843) | Cod sursa (job #1776093) | Cod sursa (job #1026864) | Cod sursa (job #931132)
Cod sursa(job #931132)
#include<fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int N = 100010;
int v[N], aux[N], pd[N], n, c;
int caut_bin(int poz, int dr){
int st=1, mid;
while(st <= dr){
mid = (st + dr)/2;
if(aux[mid] >= poz)
dr = mid-1;
else
st = mid+1;
}
return st;
}
int main(){
int i, j=1;
fin >> n;
for(i=1; i<=n; ++i)
fin >> v[i];
aux[1] = v[1];
pd[1] = 1;
for(i=2; i<=n; ++i){
if(v[i] > aux[j]){
j++;
aux[j] = v[i];
pd[i] = j;
}
else{
c = caut_bin(v[i], j);
aux[c] = v[i];
pd[i] = c;
}
}
fout << j << "\n";
c = j;
for(i=n; i>0; --i){
if(pd[i] == c){
aux[c] = v[i];
c--;
}
if(c == 0)
break;
}
for(i=1; i<=j; ++i)
fout << aux[i] << " ";
fin.close();
fout.close();
return 0;
}