Pagini recente » Monitorul de evaluare | Istoria paginii runda/simulare_iiot | Istoria paginii runda/juniori__1 | Istoria paginii runda/o_o | Cod sursa (job #2509968)
#include<fstream>
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int nr[100100],h,best[100100],pred[100100],lista[100100];
int caut(int x){
int st=0,dr=h,mij;
while(st<dr){
mij=(st+dr+1)>>1;
if(nr[lista[mij]]==x)
return mij-1;
if(nr[lista[mij]]<x)
st=mij;
else
dr=mij-1;
}
return st;
}
void scrie(int i){
if(!i)
return;
scrie(pred[i]);
g<<nr[i]<<" ";
}
int main()
{
int n,i,max=0,poz;
f>>n;
for(i=1;i<=n;++i){
f>>nr[i];
poz=caut(nr[i]);
lista[poz+1]=i;
if(poz+1>h)
h=poz+1;
best[i]=poz+1;
pred[i]=lista[poz];
if(best[i]>best[max])
max=i;
}
g<<best[max];
g<<'\n';
scrie(max);
}