#include <algorithm>
#include <iostream>
#include <vector>
#include <random>
using namespace std;
using LL = long long;
int main()
{
int n, a;
cin >> n;
vector<int> pos(n + 1);
for (int i = 0; i < n; ++i)
{
cin >> a;
pos[a] = i;
}
int res = 2 * n + 1;
LL cnt = 0;
int mn = 10000000;
int mx = -1;
for (int i = 1; i <= n; ++i)
{
int m = n - i / 2;
mn = min(mn, pos[m]);
mx = max(mx, pos[m]);
if (mx - mn < i)
{
int beg = max(0, mx - i + 1);
int end = min(n - 1, mn + i - 1);
cnt += end - beg + 1 - i + 1;
}
}
cout << res << " " << cnt << 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <algorithm> #include <iostream> #include <vector> #include <random> using namespace std; using LL = long long; int main() { int n, a; cin >> n; vector<int> pos(n + 1); for (int i = 0; i < n; ++i) { cin >> a; pos[a] = i; } int res = 2 * n + 1; LL cnt = 0; int mn = 10000000; int mx = -1; for (int i = 1; i <= n; ++i) { int m = n - i / 2; mn = min(mn, pos[m]); mx = max(mx, pos[m]); if (mx - mn < i) { int beg = max(0, mx - i + 1); int end = min(n - 1, mn + i - 1); cnt += end - beg + 1 - i + 1; } } cout << res << " " << cnt << endl; return 0; } |
English