#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define ST first
#define ND second
#define SIZE(a) ((int)a.size())
int main() {
ios_base::sync_with_stdio(0);
int n;
cin >> n;
vector<int> v(n);
vector<int> pos(n);
for(int i=0; i < n; i++) {
cin >> v[i];
pos[v[i]-1] = i;
}
int res = 2*n+1;
ll total = 0;
int pos_min = pos[n-1];
int pos_max = pos[n-1];
int k = n-2;
for(int d=1; d <= n; d++) {
if(pos_max-pos_min+1 <= d) {
int start = max(0, pos_max-d+1);
int stop = min(pos_min+d-1, n-1)-d+1;
total += stop-start+1;
}
if(d%2) {
pos_min = min(pos_min, pos[k]);
pos_max = max(pos_max, pos[k]);
k--;
}
}
cout << res << " " << total << "\n";
}
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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define ST first #define ND second #define SIZE(a) ((int)a.size()) int main() { ios_base::sync_with_stdio(0); int n; cin >> n; vector<int> v(n); vector<int> pos(n); for(int i=0; i < n; i++) { cin >> v[i]; pos[v[i]-1] = i; } int res = 2*n+1; ll total = 0; int pos_min = pos[n-1]; int pos_max = pos[n-1]; int k = n-2; for(int d=1; d <= n; d++) { if(pos_max-pos_min+1 <= d) { int start = max(0, pos_max-d+1); int stop = min(pos_min+d-1, n-1)-d+1; total += stop-start+1; } if(d%2) { pos_min = min(pos_min, pos[k]); pos_max = max(pos_max, pos[k]); k--; } } cout << res << " " << total << "\n"; } |
English