#include <bits/stdc++.h> #include <iostream> using namespace std; int sposoby(int a, int b, int cel) { if (a < b) { swap(a, b); } return min(cel, a) - max(cel - b, 0) + 1; } int main() { ios_base::sync_with_stdio(false); int n; cin >> n; vector<int> pozycje(n+1, 0); for(int i=0; i < n; i++) { int x; cin >> x; pozycje[x] = i+1; } long long wynik = 0; int start, koniec; start = koniec = pozycje[n]; for(int i=n; 2*i >= n; i--) { start = min(start, pozycje[i]); koniec = max(koniec, pozycje[i]); int ile = 2*(n-i) + 1; if (i > n / 2 && koniec - start + 1 <= ile) { wynik += sposoby(start-1, n-koniec, n-ile); } if (koniec - start + 1 <= ile - 1) { wynik += sposoby(start-1, n-koniec, n - ile + 1); } } cout << 2*n+1 << " " << wynik; }
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 | #include <bits/stdc++.h> #include <iostream> using namespace std; int sposoby(int a, int b, int cel) { if (a < b) { swap(a, b); } return min(cel, a) - max(cel - b, 0) + 1; } int main() { ios_base::sync_with_stdio(false); int n; cin >> n; vector<int> pozycje(n+1, 0); for(int i=0; i < n; i++) { int x; cin >> x; pozycje[x] = i+1; } long long wynik = 0; int start, koniec; start = koniec = pozycje[n]; for(int i=n; 2*i >= n; i--) { start = min(start, pozycje[i]); koniec = max(koniec, pozycje[i]); int ile = 2*(n-i) + 1; if (i > n / 2 && koniec - start + 1 <= ile) { wynik += sposoby(start-1, n-koniec, n-ile); } if (koniec - start + 1 <= ile - 1) { wynik += sposoby(start-1, n-koniec, n - ile + 1); } } cout << 2*n+1 << " " << wynik; } |