Pagini recente » Cod sursa (job #2174296) | Cod sursa (job #1557795) | Cod sursa (job #2521333) | Autentificare | Cod sursa (job #2014254)
#include <fstream>
#define nmax 5005
using namespace std;
fstream f1("subsir2.in", ios::in);
fstream f2("subsir2.out", ios::out);
int n, lmax;
long int v[nmax], s[nmax], lung[nmax], sol[nmax];
int cauta(int st, int dr, long int val)
{
if(st<=dr)
{
int mijl=(st+dr)/2;
if(val>= s[mijl]) return cauta(mijl+1, dr, val);
else return cauta(st, mijl-1, val);
}
else return st;
}
void citire()
{
int i, ind;
f1>>n;
for(i=1; i<=n; i++)
{
f1>>v[i];
if(v[i]>= s[lmax])
{
lmax++;
s[lmax]=v[i];
lung[i]=lmax;
}
else
{
ind=cauta(1, lmax, v[i]);//in s
s[ind]=v[i];
lung[i]=ind;
}
}
}
void solutie()
{
int i;
for(i=n; i>=1; i--)
if((!sol[lung[i]])|| (v[i]< v[sol[lung[i]]]) ) sol[lung[i]]=i;
f2<<lmax<<"\n";
for(i=1; i<=lmax; i++)
f2<<sol[i]<<' ';
}
int main()
{
citire();
solutie();
return 0;
}