Pagini recente » Cod sursa (job #2443914) | Cod sursa (job #637527) | Cod sursa (job #854079) | Cod sursa (job #1781392) | Cod sursa (job #2144566)
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int NMAX=100005;
vector<int> nivea[NMAX];
int bs(int st, int dr, int nr){
int mij;
while(st<dr-1){
mij=(st+dr)/2;
if(nivea[mij][mij]<nr)
st=mij;
else
dr=mij;
}
return st;
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,nr,niveaux=1;
scanf("%d%d", &n, &nr);
for(int i=0;i<=n;i++)
nivea[i].push_back(0);
nivea[1].push_back(nr);
for(int i=2;i<=n;i++){
scanf("%d", &nr);
int poz=bs(0, niveaux+1, nr);
nivea[poz+1]=nivea[poz];
nivea[poz+1].push_back(nr);
if(poz==niveaux)
niveaux++;
}
printf("%d\n", niveaux);
for(int i=1;i<=niveaux;i++)
printf("%d ", nivea[niveaux][i]);
return 0;
}