#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
namespace wzor
{
}
pair<i64, i64> solve_wzor(int n, int *input)
{
using namespace wzor;
vector<int> pos(n + 1);
input -= 1;
for(int i = 1; i <= n; ++i)
{
pos[input[i]] = i;
}
int min_pos = pos[n];
int max_pos = pos[n];
int64_t ans = 0;
for(int i = 1; i <= n; ++i)
{
if(i % 2 == 0)
{
min_pos = min(min_pos, pos[n - i / 2]);
max_pos = max(max_pos, pos[n - i / 2]);
}
int length = max_pos - min_pos + 1;
if(length > i) continue;
int length_left = i - length;
int beginning = max(1, min_pos - length_left);
int end = min(n, max_pos + length_left);
int possible_intervals = end - beginning - i + 2;
ans += possible_intervals;
}
i64 ans_simple = (2 * n + 1);
return {ans_simple, ans};
}
#include <bits/stdc++.h>
using namespace std;
int input[1000100];
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; ++i)
{
cin >> input[i];
}
auto c = solve_wzor(n, input);
cout << c.first << ' ' << c.second << '\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 42 43 44 45 46 47 48 49 50 51 52 53 | #include <bits/stdc++.h> using namespace std; using i64 = int64_t; namespace wzor { } pair<i64, i64> solve_wzor(int n, int *input) { using namespace wzor; vector<int> pos(n + 1); input -= 1; for(int i = 1; i <= n; ++i) { pos[input[i]] = i; } int min_pos = pos[n]; int max_pos = pos[n]; int64_t ans = 0; for(int i = 1; i <= n; ++i) { if(i % 2 == 0) { min_pos = min(min_pos, pos[n - i / 2]); max_pos = max(max_pos, pos[n - i / 2]); } int length = max_pos - min_pos + 1; if(length > i) continue; int length_left = i - length; int beginning = max(1, min_pos - length_left); int end = min(n, max_pos + length_left); int possible_intervals = end - beginning - i + 2; ans += possible_intervals; } i64 ans_simple = (2 * n + 1); return {ans_simple, ans}; } #include <bits/stdc++.h> using namespace std; int input[1000100]; int main() { int n; cin >> n; for(int i = 0; i < n; ++i) { cin >> input[i]; } auto c = solve_wzor(n, input); cout << c.first << ' ' << c.second << '\n'; } |
English