Pagini recente » Cod sursa (job #2251489) | Cod sursa (job #3219984) | Cod sursa (job #1260992) | Cod sursa (job #2006998) | Cod sursa (job #553312)
Cod sursa(job #553312)
#include <fstream>
using namespace std;
#define NMAX 100004
int n;
int A[NMAX];
int V[NMAX], L; // sirul care pastreaza elem sortate cresc si L dimensiunea lui (a CMLSC)
void Read();
void CLSC(); // O(n * log n)
void Write();
int main()
{
Read();
CLSC();
Write();
return 0;
}
void Read()
{
ifstream fin("scmax.in");
fin >> n;
for ( int i = 0; i < n; i++ )
fin >> A[i];
fin.close();
}
void CLSC()
{
int i, l, r, m;
V[0] = A[0];
L = 1;
for (i = 1; i < n; i++)
{
if (A[i] > V[L-1]) V[L++] = A[i];
else
{
l = 0, r = L-1;
while (l < r)
{
m = (l + r) >> 1;
if (A[i] < V[m]) r = m;
else l = m + 1;
}
if ( V[l-1] != A[i] ) V[l] = A[i];
}
}
}
void Write()
{
ofstream fout("scmax.out");
fout << L << "\n";
for (int i = 0; i < L; i++)
fout << V[i] << " ";
}