Pagini recente » Cod sursa (job #1192088) | Cod sursa (job #1327977) | Cod sursa (job #1364903) | Cod sursa (job #884742) | Cod sursa (job #780878)
Cod sursa(job #780878)
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
#define nmax 100001
long long a[nmax],best[nmax];
long long tata[nmax];
long long i,j,n;
void caut(long long lol,long long f,long long l){
long long m=(f+l)/2;
if(f==l-1)
m++;
if(lol<=best[m] && lol>best[m-1]){
best[m]=lol;
tata[i]=best[m-1];
}
else
if(lol>=best[m])
caut(lol,m,l);
else
caut(lol,f,m);
}
long long ct;
long long sir[nmax];
int main(){
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
for(i=1;i<=n;i++){
f>>a[i];
best[i]=2000000000;
}
best[n+1]=2000000000;
best[0]=-2000000000;
for(i=1;i<=n;i++){
caut(a[i],0,n);
}
for(i=1;i<=n;i++){
if(best[i]==2000000000){
i=n+1;
}
else{
ct++;
}
}
g<<ct<<"\n";
int x=ct,ff=ct;
sir[ct]=best[x];
ct--;
x=best[x];
while(ct){
for(i=1;i<=n;i++){
if(x==a[i]){
x=i;
i=n+1;
}
}
sir[ct]=tata[x];
if(sir[ct]<0)
sir[ct]=1;
ct--;
x=tata[x];
}
for(i=1;i<=ff;i++)
g<<sir[i]<<" ";
return 0;
}