Pagini recente » Cod sursa (job #1713786) | Cod sursa (job #2340437) | Cod sursa (job #881917) | Cod sursa (job #2895693) | Cod sursa (job #2394392)
#include <fstream>
using namespace std;
ifstream f("subsir2.in");
ofstream g("subsir2.out");
int n,v[5005];
int best[5005],poz[5005],l[5005],pos,nr;
int caut(int x){
int li=0;
int ls=nr;
int mij=(li+ls)/2;
while(li<=ls){
if(v[l[mij]]<x && v[l[mij+1]]>=x) return mij;
if(v[l[mij+1]]<x){
li=mij+1;
mij=(li+ls)/2;
}else{
ls=mij-1;
mij=(li+ls)/2;
}
}
return nr;
}
int main(){
int i;
f>>n;
for(i=1; i<=n; i++)
f>>v[i];
nr=1;
best[1]=1;
l[1]=1;
for(i=2; i<=n; i++){
pos=caut(v[i]);
poz[i]=l[pos];
best[i]=pos+1;
l[pos+1]=i;
nr=max(nr,pos+1);
}
int maxim=0;
for(i=1; i<=n; i++)
maxim=max(maxim,best[i]);
g<<maxim<<"\n";
for(i=1; i<=maxim; i++)
g<<l[i]<<" ";
//for(i=1; i<=n; i++)
// g<<l[i]<<" ";
return 0;
}