#include <algorithm>
#include <cstdio>
#include <vector>
#include <set>
#include <climits>
using namespace std;
long a[1000002];
int main()
{
long n, l;
scanf("%ld", &n);
for (long i = 1; i <= n; ++i)
{
scanf("%ld", &l);
a[l] = i;
}
long long res = 1;
long f = n + 1 + n;
long _min = a[n], _max = a[n];
for (long i = 2; i <= n; ++i)
{
long m = (f - i) / 2;
if (a[m] < _min)
_min = a[m];
if (a[m] > _max)
_max = a[m];
if (_max - _min < i)
res += i - (std::max(i, _max) - std::min(n - i + 1, _min));
}
printf("%ld %lld", f, res);
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 | #include <algorithm> #include <cstdio> #include <vector> #include <set> #include <climits> using namespace std; long a[1000002]; int main() { long n, l; scanf("%ld", &n); for (long i = 1; i <= n; ++i) { scanf("%ld", &l); a[l] = i; } long long res = 1; long f = n + 1 + n; long _min = a[n], _max = a[n]; for (long i = 2; i <= n; ++i) { long m = (f - i) / 2; if (a[m] < _min) _min = a[m]; if (a[m] > _max) _max = a[m]; if (_max - _min < i) res += i - (std::max(i, _max) - std::min(n - i + 1, _min)); } printf("%ld %lld", f, res); return 0; } |
English