Pagini recente » Cod sursa (job #2548951) | Cod sursa (job #2240677) | Cod sursa (job #690136) | Cod sursa (job #918898) | Cod sursa (job #811348)
Cod sursa(job #811348)
#include <fstream> //scmax 100p infoarena
using namespace std;
#define LMax 100010
int v[LMax],s[LMax],L[LMax],sol[LMax],n,i,j,k,poz,p,maxi;
ifstream f("scmax.in");
ofstream g("scmax.out");
int caut_bin(int x){
int mij,st,dr;
st=1;dr=k;
while(st<=dr){
mij=(st+dr)/2;
if(s[mij-1]<x&&s[mij]>=x)return mij;
else
if(s[mij]>x)dr=mij-1;
else st=mij+1;
}
return 0;
}
int main(){
f>>n;
for(i=1;i<=n;i++)f>>v[i];
s[1]=v[1];
L[1]=1;
k=1;
for(i=2;i<=n;i++){
poz=caut_bin(v[i]);
if(poz==0){ s[++k]=v[i];L[i]=k;}
else {s[poz]=v[i];L[i]=poz;}
}
for(i=1;i<=n;i++)
if(L[i]>maxi){ maxi=L[i];p=i; }
k=0;
g<<maxi<<'\n';
while(maxi){
if(L[p]==maxi) { sol[++k]=v[p]; maxi--;}
p--;
}
for(i=k;i>0;i--) g<<sol[i]<<" ";
g<<'\n';
f.close();g.close();
return 0;
}
/*
#include <fstream> //70p
using namespace std;
#define LMax 100010
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[LMax],L[LMax],poz[LMax],sol[LMax],j,maxi,maxL,Pmax,t,n,i;
int main()
{
f >> n;
for(i=1;i<=n;i++)f >> a[i];
L[1]=1;
for(i=2;i<=n;i++)
{
maxi=0;
for(j=i-1;j>=1;j--)
if(a[j]<a[i] && maxi<L[j])
{
maxi=L[j];
poz[i]=j;
}
L[i]=maxi+1;
}
maxL=0;
for(i=1;i<=n;i++)
if(maxL<L[i])
{
maxL=L[i];
Pmax=i;
}
t=1;j=Pmax;
while (j!=0)
{
sol[t++]=a[j];
j=poz[j];
}
g << maxL << '\n';
for(i=t-1;i>=1;i--) g << sol[i] << ' ';
g << '\n';
f.close(); g.close();
return 0;
}
*/