Pagini recente » Cod sursa (job #2511234) | Cod sursa (job #915435) | Cod sursa (job #1157111) | Cod sursa (job #1992701) | Cod sursa (job #3262867)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("subsir2.in");
ofstream g ("subsir2.out");
int n, v[5005], dp[5005], mn[5005], l[5005], lmx, rez[5005];
void add (int val, int ind)
{
if (lmx==0 || dp[lmx]<=val)
{
dp[++lmx]=val;
rez[lmx]=ind;
return;
}
int st=1, dr=lmx, poz=0;
while (st<=dr)
{
int mij = (st+dr) >> 1;
if (dp[mij]<=val)
{
poz=mij;
st=mij+1;
}
else dr=mij-1;
}
dp[poz+1]=val;
mn[poz+1]=val;
rez[poz+1]=ind;
return;
}
int main()
{
for (int i=1;i<=5000;i++)
{
mn[i]=1e9;
}
f >> n;
for (int i=1;i<=n;i++)
{
f >> v[i];
add (v[i], i);
}
g << lmx << "\n";
for (int i=1;i<=lmx;i++)
{
g << rez[i] << " ";
}
return 0;
}