1.题面
https://www.patest.cn/contests/pat-a-practise/1101
2.题意
找轴点
3.思路
维护两个数组记录结果,没什么意思,值得吐槽的是就算不存在轴点,也要求输出一个空行
4.代码
/***************************************************************** > File Name: cpp_acm.cpp > Author: Uncle_Sugar > Mail: [email protected] > Created Time: Thu 02 Feb 2017 16:19:56 CST *****************************************************************/ # include <cstdio> # include <cstring> # include <cctype> # include <cmath> # include <cstdlib> # include <climits> # include <iostream> # include <iomanip> # include <set> # include <map> # include <vector> # include <stack> # include <queue> # include <algorithm> using namespace std; # define rep(i,a,b) for (i=a;i<=b;i++) # define rrep(i,a,b) for (i=b;i>=a;i--) # define mset(aim, val) memset(aim, val, sizeof(aim)) struct QuickIO{ QuickIO(){const int SZ = 1<<20; setvbuf(stdin ,new char[SZ],_IOFBF,SZ); setvbuf(stdout,new char[SZ],_IOFBF,SZ); } //*From programcaicai*// }QIO; template<class T>void PrintArray(T* first,T* last,char delim=' '){ for (;first!=last;first++) cout << *first << (first+1==last?'\n':delim); } /* 1.see the size of the input data before you select your algorithm 2.cin&cout is not recommended in ACM/ICPC 3.pay attention to the size you defined, for instance the size of edge is double the size of vertex */ const int debug = 1; const int size = 10 + 100000; const int INF = INT_MAX>>1; typedef long long ll; int a[size], al[size], ar[size]; int main(){ std::ios::sync_with_stdio(false);cin.tie(0); int n; cin >> n; for (int i = 1; i <= n; i++){ cin >> a[i]; } a[0] = -INF; a[n+1] = INF; al[0] = a[0]; for (int i = 1; i <= n; i++){ al[i] = max(al[i-1], a[i]); } ar[n+1] = a[n+1]; for (int i = n; i >= 1; i--){ ar[i] = min(ar[i+1], a[i]); } int cnt = 0; vector<int> vct; for (int i = 1; i <= n; i++){ if (a[i] >= al[i-1] && a[i] <= ar[i+1]){ cnt++; vct.push_back(a[i]); } } cout << cnt << endl; if (!cnt) puts(""); for (int i = 0; i < vct.size(); i++){ cout << vct[i] << (i==vct.size()-1?'\n':' '); } return 0; }