Pagini recente » Cod sursa (job #2690274) | Cod sursa (job #2215927) | Cod sursa (job #65209) | Cod sursa (job #2545279) | Cod sursa (job #2966401)
#include <fstream>
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
#define MAX_a 2000000000
#define MAX_n 100000
int v[MAX_n], d[MAX_n], pred[MAX_n], s[MAX_n];
int cautabin (int st, int dr, int a)
{
int mij = dr + st / 2;
if(dr - st <= 1) return st;
if(a > v[s[mij]])
{
cautabin(mij, dr, a);
}
else
{
cautabin(st, mij, a);
}
}
void scrie(int poz)
{
if(poz <= 1) return;
scrie(pred[poz]);
cout << v[s[poz]];
}
int main()
{
int n, ans = 0, a;
cin >> n;
for (int i = 0; i < n; ++i)
s[i] = MAX_a + 1;
for(int i = 0; i < n; ++i)
{
cin >> v[i];
int lung = cautabin(1, ans, v[i]) + 1;
if(v[i] < v[s[lung]])
{
s[lung] = i;
pred[lung] = lung - 1;
}
ans = max(ans, lung);
}
cout << ans << '\n';
scrie(ans);
}