Pagini recente » Cod sursa (job #1541788) | Cod sursa (job #2767987) | Cod sursa (job #1436782) | Cod sursa (job #2281652) | Cod sursa (job #2507220)
#include <bits/stdc++.h>
using namespace std;
ifstream in("sclm.in");
ofstream out("sclm.out");
const int NMAX=100003;
int n,nr,v[NMAX],l[NMAX],best[NMAX],p[NMAX];
void afis(int i){
if(p[i]>0) afis(p[i]);
out<<i<<" ";
}
int caut(int val){
int p,rez;
for(p=1;p<nr;p<<=1);
for(rez=0;p;p>>=1)
if(rez+p<=nr && v[l[rez+p]]<val)
rez+=p;
return rez;
}
int main()
{
in>>n;
for(int i=1;i<=n;i++)
in>>v[i];
l[1]=best[1]=1,l[0]=0;
nr=1;
int poz;
for(int i=2;i<=n;i++){
poz=caut(v[i]);
p[i]=l[poz];
best[i]=poz+1;
l[poz+1]=i;
if (nr < poz + 1) nr=poz+1;
}
int maxim=0;
for(int i=1;i<=n;i++)
if(maxim<best[i]){
maxim=best[i];
poz=i;
}
out<<maxim<<'\n';
afis(poz);
return 0;
}