#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"; } |