Pagini recente » Cod sursa (job #2336426) | Cod sursa (job #1366343) | Cod sursa (job #1880271) | Cod sursa (job #2843041) | Cod sursa (job #2267049)
#include <fstream>
#define NMAX 100028
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int lgmax, n, maxim;
int a[NMAX], pos[NMAX], best[NMAX], s[NMAX];
void read();
void pd();
int searchbin(int x);
void print();
int main()
{
read();
pd();
print();
return 0;
}
void read(){
int i;
fin >> n;
for(i = 1; i <= n; i++)
fin >> a[i];
pos[1] = 1; best[1] = a[1]; lgmax = 1;
}
void pd(){
int i, position;
for(i = 2; i <= n; i++){
if(a[i] > best[lgmax]){
best[++lgmax] = a[i];
pos[i] = lgmax;
}
else{
position = searchbin(a[i]);
best[position] = a[i];
pos[i] = position;
}
}
}
//caut binar in best cel mai mic nr >= a[i] si returnez pozitia lui
int searchbin(int x){
int st = 0, dr = lgmax + 1, mid;
while(dr - st > 1){
mid = (st + dr) / 2;
if(a[mid] >= x)
dr = mid;
else
st = mid;
}
return dr;
}
void print(){
int i, j;
fout << lgmax << '\n';
for(i = n, j = lgmax; i >= 1 && j; i--)
if(pos[i] == j){
s[j] = a[i];
j--;
}
for(i = 1; i < lgmax; i++)
fout << s[i] << ' ';
fout << s[i] << '\n';
}