Pagini recente » Cod sursa (job #2696258) | Cod sursa (job #472481) | Cod sursa (job #25049) | Cod sursa (job #2919561) | Cod sursa (job #741206)
Cod sursa(job #741206)
#include <stdio.h>
#include <set>
#include <vector>
using namespace std;
struct cont{ int pos,val; }nou;
bool compare(cont a,cont b){return a.val<b.val;}
bool(*point)(cont,cont)=compare;
set<cont,bool(*)(cont,cont)>s(point);
set<cont>::iterator it;
vector<int>v;
int u[100005],a[100005];
int main(){
int i,n,k=0;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
nou.val=a[i];
it=s.lower_bound(nou);
if(it==s.end()){
u[i]=++k;
nou.pos=u[i];
s.insert(nou); } else {
nou.pos=it->pos;
u[i]=nou.pos;
s.erase(it);
s.insert(nou); } }
printf("%d\n",k);
for(i=n;i>0;i--)
if(u[i]==k){
v.push_back(a[i]); k--; }
for(;v.size()>0;){
printf("%d ",v.back());
v.pop_back(); }
}