Pagini recente » Cod sursa (job #2622935) | Cod sursa (job #2790120) | Cod sursa (job #2301237) | Cod sursa (job #659704) | Cod sursa (job #399797)
Cod sursa(job #399797)
#include <fstream>
#include <iostream>
#define MAX 100000
#define MAXB 8192
using namespace std;
char buf[MAXB];
unsigned ptr=0;
FILE* fin=fopen("scmax.in","rb");
int getInt(){
while(buf[ptr]<'0'||'9'<buf[ptr]){
if(++ptr>=MAXB){
fread(buf,1,MAXB,fin);
ptr=0;
}
}
int nr=0;
while('0'<=buf[ptr]&&buf[ptr]<='9'){
nr=nr*10+buf[ptr]-'0';
if(++ptr>=MAXB){
fread(buf,1,MAXB,fin);
ptr=0;
}
}
return nr;
}
int main(){
fread(buf,1,MAXB,fin);
freopen("scmax.out","wt",stdout);
int vec[MAX],vP[MAX],v[MAX],res[MAX];
int n,imax=0,k,p=0;
vP[0]=-1;
v[0]=1;
n=getInt();
for(int i=0;i<n;i++){
vec[i]=getInt();
}
for(int i=n-1;i>=0;--i){
vP[i]=-1;
v[i]=1;
for(int j=i+1;j<n;++j){
if(vec[j]>vec[i]&&v[j]+1>v[i]){
v[i]=v[j]+1;
vP[i]=j;
}
}
if(v[i]>v[imax]){
imax=i;
}
}
printf("%d\n",v[imax]);
k=imax;
while(vP[k]!=-1){
printf("%d ",vec[k]);
k=vP[k];
}
printf("%d ",vec[k]);
fclose(fin);
}