Pagini recente » Cod sursa (job #1880113) | Cod sursa (job #1535959) | Cod sursa (job #360118) | Cod sursa (job #2236553) | Cod sursa (job #2143042)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void afisare(int);
int n;
int a[100005], s[100005], parent[100005];
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> a[i];
}
s[1] = 1;
int len = 1;
for (int i = 2; i <= n; i++)
{
if (a[i] > a[s[len]])
{
parent[i] = s[len];
s[++len] = i;
}
else if (a[i] < a[s[1]])
s[1] = i;
else
{
int st = 0, dr = len + 1;
while (dr - st > 1)
{
int mij = st + (dr - st) / 2;
if (a[s[mij]] >= a[i])
dr = mij;
else
st = mij;
}
parent[i] = s[dr - 1];
s[dr] = i;
}
}
fout << len << '\n';
afisare(s[len]);
return 0;
}
void afisare(int x)
{
if (parent[x])
afisare(parent[x]);
fout << a[x] << ' ';
}