Pagini recente » Cod sursa (job #2370583) | Cod sursa (job #117338) | Cod sursa (job #1693185) | Cod sursa (job #6221) | Cod sursa (job #2975333)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, lg;
int v[100001], d[100001], p[100001], a[100001];
int main()
{
f>>n;
for(int i=1; i<=n; i++)
f>>v[i];
d[++lg]=v[1];
p[1]=1;
for(int i=2; i<=n; i++)
{
if(d[lg] <= v[i])
d[++lg]=v[i], p[i]=lg;
else
{
int st=1, dr=lg;
int val=lg+1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(d[mij]>v[i])
val=mij, dr=mij-1;
else
st=mij+1;
}
d[val]=v[i];
p[i]=val;
}
}
g<<lg<<'\n';
int j=n;
for(int i=lg; i>0; i--)
{
while(p[j] != i)
j--;
a[i]=j;
}
for(int i=1; i<=lg; i++)
g<<a[i]<<" ";
}