Pagini recente » Cod sursa (job #2595385) | Cod sursa (job #2555110) | Cod sursa (job #3288489) | Cod sursa (job #1336179) | Cod sursa (job #1083814)
#include <cstdio>
#include <fstream>
using namespace std;
int n,i,k,p,st,dr,mid,l;
int v[100005],x[100005],t[100005],sol[100005];
bool ok;
int main() {
FILE *f = fopen("scmax.in","r");
ofstream g("scmax.out");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
l=0;
for(i=1;i<=n;i++) {
st=1;dr=l;ok=0;
while(st<=dr) {
mid=(st+dr)/2;
if(v[x[mid]]>v[i])
dr=mid-1;
else
if(v[x[mid]]<v[i])
st=mid+1;
else{
ok=1;break;
}
}
if(!ok){
if(st==l+1){
l++;
x[l]=i;
t[i]=x[l-1];
}
else
if(st==1){
x[st]=i;
t[i]=-1;
}
else
{
x[st]=i;
t[i]=x[i-1];
}
}
}
g<<l<<"\n";
for(p=x[l];p!=-1;p=t[p]){
k++;
sol[k]=v[p];
}
while(k) {
g<<sol[k]<<" ";
k--;
}
return 0;
}