Pagini recente » Cod sursa (job #1980523) | Cod sursa (job #2443510) | Cod sursa (job #2922921) | Cod sursa (job #2514043) | Cod sursa (job #2507222)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.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 x)
{
int p, u, m;
p = 0; u = nr; m = (p+u)/2;
while (p <= u)
{
if (v[l[m]] < x && v[l[m+1]] >= x) return m;
else if (v[l[m+1]] < x) {p = m + 1; m = (p + u)/2;}
else {u = m - 1; m = (p + u)/2;}
}
return nr;
}
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;
}