Pagini recente » Cod sursa (job #164201) | Cod sursa (job #1742156) | Cod sursa (job #2635370) | Cod sursa (job #446194) | Cod sursa (job #2304561)
#include <fstream>
#include <limits.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, i, j, pp, maxim, poz, v[100005], b[100005], l[100005], p[100005];
inline int print (int a){
if (p[a] > 0){
print (p[a]);
}
fout << v[a] << " ";
}
inline int cautareBinara (int x){
int st, dr, mid;
st = 0;
dr = pp;
while (st <= dr){
mid = st + (dr - st)/2;
if (v[l[mid]] < x && v[l[mid+1]] >= x){
return mid;
}
if (v[l[mid+1]] < x){
st = mid + 1;
}
else{
dr = mid - 1;
}
}
return pp;
}
int main()
{
fin >> n;
for (i=1; i<=n; i++){
fin >> v[i];
}
pp = 1;
l[1] = 1, b[1] = 1;
for (i=2; i<=n; i++){
poz = cautareBinara (v[i]);
p[i] = l[poz];
b[i] = poz + 1;
l[poz+1] = i;
if (pp < poz + 1){
pp = poz + 1;
}
}
maxim = 0, poz = 0;
for (i=1; i<=n; i++){
if (b[i] > maxim){
maxim = b[i];
poz = i;
}
}
fout << maxim << "\n";
print (poz);
return 0;
}