Pagini recente » Cod sursa (job #2696904) | Cod sursa (job #665923) | Cod sursa (job #1117583) | Cod sursa (job #2882955) | Cod sursa (job #2496826)
#include <fstream>
using namespace std;
ifstream fin("subsir2.in");
ofstream fout("subsir2.out");
int a[5005], lis[5005], n, k, ind[5005];
int CautBin(int x)
{
int st = 1, dr = k, poz = 1, mij;
while(st <= dr)
{
mij = (st + dr) / 2;
if(a[mij] <= x)
{
poz = mij;
st = mij + 1;
}
else dr = mij - 1;
}
return poz;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
fin >> a[i];
lis[++k] = a[1];
ind[k] = 1;
for(int i = 2; i <= n; i++)
{
int x = a[i];
if(x > lis[k])
{
lis[++k] = x;
ind[k] = i;
}
else
{
int p = CautBin(x);
if(x < lis[p + 1])
{
lis[p + 1] = x;
ind[p + 1] = i;
}
}
}
fout << k << "\n";
for(int i = 1; i <= k; i++)
fout << ind[i] <<" ";
return 0;
}