#include <bits/stdc++.h> using namespace std; int main(int argc, char* argv[]) { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long n, m, l, r, p, c, a, b, z; cin >> n; vector<int> v(n), k(n + 1); for (int i = 0; i < n; i++) { cin >> v[i]; k[v[i]] = i; } c = 0; m = 0; l = r = k[n]; while(m++ < n) { p = m - r + l - 1; if (p >= 0) { a = l; b = n - r - 1; c += min(min(a, b) + 1, min(p, a + b - p) + 1); } if (m&1) { z = k[n - (m + 1)/2]; if (z < l) l = z; else if (z > r) r = z; } } cout << n * 2 + 1 << " " << c << endl; 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 | #include <bits/stdc++.h> using namespace std; int main(int argc, char* argv[]) { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); long long n, m, l, r, p, c, a, b, z; cin >> n; vector<int> v(n), k(n + 1); for (int i = 0; i < n; i++) { cin >> v[i]; k[v[i]] = i; } c = 0; m = 0; l = r = k[n]; while(m++ < n) { p = m - r + l - 1; if (p >= 0) { a = l; b = n - r - 1; c += min(min(a, b) + 1, min(p, a + b - p) + 1); } if (m&1) { z = k[n - (m + 1)/2]; if (z < l) l = z; else if (z > r) r = z; } } cout << n * 2 + 1 << " " << c << endl; return 0; } |