Pagini recente » Cod sursa (job #3198200) | Cod sursa (job #1658178) | Cod sursa (job #2130733) | Cod sursa (job #81477) | Cod sursa (job #1680395)
#include <stdio.h>
#include <vector>
#define NMIN 2000000003
using namespace std;
int main(){
freopen("scmax.in", "r", stdin);
freopen("scmax.out","w", stdout);
long n, i, j, maxElem, minElem, biggestMin, indexBig, x, vecMax, indexVec;
scanf("%ld ", &n);
vector<vector<long> > solutions;
scanf("%ld ", &x);
vector<long> temp(1,x);
solutions.push_back(temp);
vecMax = 0;
indexVec = 0;
for(i = 1; i < n; i++){
scanf("%ld ", &x);
maxElem = 0;
minElem = NMIN;
biggestMin = 0;
vecMax = 0;
indexVec = 0;
for(j = 0; j < solutions.size(); j++){
if(solutions[j][solutions[j].size() - 1] > maxElem)
maxElem = solutions[j][solutions[j].size() - 1];
if(solutions[j][solutions[j].size() - 1] < minElem)
minElem = solutions[j][solutions[j].size() - 1];
if((solutions[j][solutions[j].size() - 1] > biggestMin) && (solutions[j][solutions[j].size() - 1] < x)){
biggestMin = solutions[j][solutions[j].size() - 1];
indexBig = j;
}
if(solutions[j].size() > vecMax){
vecMax = solutions[j].size();
indexVec = j;
}
}
if(x > maxElem){
vector<long> tm(solutions[indexVec]);
tm.push_back(x);
solutions.push_back(tm);
if(tm.size() > vecMax){
vecMax = tm.size();
indexVec = solutions.size() - 1;
}
} else if(x < minElem){
temp[0] = x;
solutions.push_back(temp);
for(j = 0; j < solutions.size() - 1; j++)
if(solutions[j].size() == 1){
solutions.erase(solutions.begin()+j);
break;
}
} else if((x > minElem) && (x < maxElem) && (biggestMin != 0)){
vector<long> tm(solutions[indexBig]);
tm.push_back(x);
solutions.push_back(tm);
if(tm.size() > vecMax){
vecMax = tm.size();
indexVec = solutions.size() - 1;
}
for(j = 0; j < solutions.size() - 1; j++)
if(solutions[j].size() == tm.size()){
solutions.erase(solutions.begin()+j);
break;
}
}
}
printf("%ld\n", vecMax);
for(i = 0; i < solutions[indexVec].size(); i++)
printf("%ld ", solutions[indexVec][i]);
return 0;
}