Pagini recente » Cod sursa (job #2328654) | Cod sursa (job #749841) | Cod sursa (job #1664360) | Cod sursa (job #38629) | Cod sursa (job #930631)
Cod sursa(job #930631)
#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=0, mid;
while(st < dr){
mid = (st + dr)/2;
if(v[mid] > poz)
dr = mid;
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;
}