#include <bits/stdc++.h>
#include <climits>
#include <cstddef>
#include <iostream>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vector<int>;
using vll = vector<ll>;
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define sz(x) (int)(x).size()
#define pb push_back
#define ff first
#define ss second
const int INF = 1e9;
const ll LINF = 1e18;
void solve() {
int n, k;
cin >> n;
vi v(n);
for (int i = 0; i < n; i++) {
int next;
cin >> next;
v[i] = next;
}
vi lens(n);
lens[0] = 1;
for (int i = 1; i < n; i++) {
int previous = v[i - 1];
int current = v[i];
lens[i] = previous < current ? 1 + lens[i - 1] : 1;
}
lens[n - 1] = v[n - 2] < v[n - 1] ? 1 + lens[n - 2] : 1;
int maxValue = 0;
int index = -1;
for (int i = 0; i < n; i++) {
int value = lens[i];
if (value > maxValue) {
index = i;
maxValue = value;
}
}
vi indexes;
for (int i = 0; i < n; i++) {
if (lens[i] == maxValue) {
indexes.pb(i);
}
}
int min = INT_MAX;
int minIndex = -1;
for (size_t i = 0; i < indexes.size(); i++) {
if (v[indexes[i]] < min) {
min = v[indexes[i]];
minIndex = indexes[i];
}
}
index = minIndex;
vi result;
int start = index - (maxValue - 1);
for (int i = start; i < n; i++) {
result.push_back(v[i]);
}
for (int i = 0; i < start; i++) {
result.push_back(v[i]);
}
int currentMax = result[0];
int ans = 1;
for (int i = 1; i < n; i++) {
int value = result[i];
if (value > currentMax) {
ans++;
currentMax = value;
}
}
cout << ans << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(0);
int t = 1;
while (t--)
solve();
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #include <bits/stdc++.h> #include <climits> #include <cstddef> #include <iostream> using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; using vi = vector<int>; using vll = vector<ll>; #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define sz(x) (int)(x).size() #define pb push_back #define ff first #define ss second const int INF = 1e9; const ll LINF = 1e18; void solve() { int n, k; cin >> n; vi v(n); for (int i = 0; i < n; i++) { int next; cin >> next; v[i] = next; } vi lens(n); lens[0] = 1; for (int i = 1; i < n; i++) { int previous = v[i - 1]; int current = v[i]; lens[i] = previous < current ? 1 + lens[i - 1] : 1; } lens[n - 1] = v[n - 2] < v[n - 1] ? 1 + lens[n - 2] : 1; int maxValue = 0; int index = -1; for (int i = 0; i < n; i++) { int value = lens[i]; if (value > maxValue) { index = i; maxValue = value; } } vi indexes; for (int i = 0; i < n; i++) { if (lens[i] == maxValue) { indexes.pb(i); } } int min = INT_MAX; int minIndex = -1; for (size_t i = 0; i < indexes.size(); i++) { if (v[indexes[i]] < min) { min = v[indexes[i]]; minIndex = indexes[i]; } } index = minIndex; vi result; int start = index - (maxValue - 1); for (int i = start; i < n; i++) { result.push_back(v[i]); } for (int i = 0; i < start; i++) { result.push_back(v[i]); } int currentMax = result[0]; int ans = 1; for (int i = 1; i < n; i++) { int value = result[i]; if (value > currentMax) { ans++; currentMax = value; } } cout << ans << endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(0); int t = 1; while (t--) solve(); return 0; } |
English