Pagini recente » Cod sursa (job #3240593) | Cod sursa (job #2693738) | Cod sursa (job #1701041) | Cod sursa (job #2524555) | Cod sursa (job #2965885)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int Nmax = 100001;
const int ValMax = 2000000000;
int v[Nmax], s[Nmax], prv[Nmax];
int binarySearch(int start, int finish, int index){
int mid, sol;
sol = -1;
while(start <= finish){
mid = (start + finish) / 2;
if(v[index] <= v[s[mid]]){
sol = mid;
finish = mid - 1;
}
else{
start = mid + 1;
}
}
return sol;
}
void reconst(int poz){
if(poz != -1){
reconst(prv[poz]);
fout << v[poz] << " ";
}
}
int main()
{
int n, lenmax, index;
fin >> n;
for(int i = 0; i < Nmax; i++){
s[i] = Nmax - 1;
}
v[Nmax - 1] = ValMax;
lenmax = 0;
for(int i = 0; i < n; i++){
fin >> v[i];
index = binarySearch(0, lenmax, i);
if(s[index] == Nmax - 1){
lenmax++;
}
s[index] = i;
if(index > 0){
prv[i] = s[index - 1];
}
else{
prv[i] = -1;
}
}
fout << lenmax << '\n';
reconst(s[lenmax - 1]);
return 0;
}