Pagini recente » Cod sursa (job #928441) | Cod sursa (job #1315678) | Cod sursa (job #352513) | Cod sursa (job #1557167) | Cod sursa (job #49997)
Cod sursa(job #49997)
#include <fstream>
using namespace std;
#define NMAX 30001
int n;
int A[NMAX];
int V[NMAX], L; // sirul care pastreaza CMLSC si L dimensiunea lui
void Read();
void CLSC(); // O(n * log n)
void Write();
int main()
{
Read();
CLSC();
Write();
return 0;
}
void Read()
{
ifstream fin("subsir2.in");
fin >> n;
for ( int i = 0; i < n; i++ )
fin >> A[i];
fin.close();
}
void CLSC()
{
int i, l, r, m;
V[0] = 0;
L = 1;
for (i = 1; i < n; i++)
{
if (A[i] > A[ V[L-1] ]) V[L++] = i;
else
{
l = 0, r = L-1;
while (l < r)
{
m = (l + r) >> 1;
if (A[i] < A[ V[m] ]) r = m;
else l = m + 1;
}
if ( A[ V[l-1] ] != A[i] ) V[l] = i;
}
}
}
void Write()
{
ofstream fout("subsir2.out");
fout << L << "\n";
for (int i = 0; i < L; i++)
fout << V[i]+1 << " ";
}