#include <bits/stdc++.h> using namespace std; constexpr long long maxi = 1e6; long long indeksy[maxi + 7]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n; cin >> n; long long z; for(long long i = 1; i <= n; i++) { cin >> z; indeksy[z] = i; } cout << n * 2 + 1 << " "; long long ile = 1; long long lewa = indeksy[n], prawa = indeksy[n]; for(long long d = 2; d <= n; d++) { long long szuk = (d / 2) + 1; szuk = indeksy[n - szuk + 1]; if(szuk < lewa) lewa = szuk; if(szuk > prawa) prawa = szuk; long long dlugosc = prawa - lewa + 1; if(dlugosc > d) continue; long long reszta = d - dlugosc; long long z_lewej = lewa - 1; long long z_prawej = n - prawa; if(z_lewej + z_prawej < reszta) continue; ile += max((long long)0, min(reszta, z_lewej) - max((long long)0, reszta - z_prawej) + 1); } cout << ile << endl; }
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 | #include <bits/stdc++.h> using namespace std; constexpr long long maxi = 1e6; long long indeksy[maxi + 7]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n; cin >> n; long long z; for(long long i = 1; i <= n; i++) { cin >> z; indeksy[z] = i; } cout << n * 2 + 1 << " "; long long ile = 1; long long lewa = indeksy[n], prawa = indeksy[n]; for(long long d = 2; d <= n; d++) { long long szuk = (d / 2) + 1; szuk = indeksy[n - szuk + 1]; if(szuk < lewa) lewa = szuk; if(szuk > prawa) prawa = szuk; long long dlugosc = prawa - lewa + 1; if(dlugosc > d) continue; long long reszta = d - dlugosc; long long z_lewej = lewa - 1; long long z_prawej = n - prawa; if(z_lewej + z_prawej < reszta) continue; ile += max((long long)0, min(reszta, z_lewej) - max((long long)0, reszta - z_prawej) + 1); } cout << ile << endl; } |