Pagini recente » Cod sursa (job #310764) | Cod sursa (job #121811) | Cod sursa (job #2359532) | Cod sursa (job #2788689) | Cod sursa (job #2573578)
#include<bits/stdc++.h>
using namespace std;
const int NMAX=100005;
vector<int> best[NMAX];
int bs(int st, int dr, int val){
while(st<dr-1){
int mij=(st+dr)/2;
if(best[mij][mij]<val)
st=mij;
else
dr=mij;
}
return st;
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,nr;
scanf("%d%d", &n, &nr);
for(int i=0;i<=n;i++)
best[i].push_back(0);
best[1].push_back(nr);
int cnt=1;
for(int i=2;i<=n;i++){
scanf("%d", &nr);
int poz=bs(0, cnt+1, nr);
best[poz+1]=best[poz];
best[poz+1].push_back(nr);
if(poz==cnt)
cnt++;
}
printf("%d\n", cnt);
for(int i=1;i<=cnt;i++)
printf("%d ", best[cnt][i]);
return 0;
}