#include <iostream> #include <vector> #include <set> using namespace std; long long wynik = 0; double n; int pierw; int ost; void zliczanie(vector <int> a, double mediana){ int l = 0; long long p = a.size()-1; while (a[l] < mediana) { l++; } while (a[p] < mediana) { p--; } vector <int> b; for (long i = l; i <= p; i++) { b.push_back(a[i]); } p = a.size()-1-p; mediana += (l+p)*0.5; wynik += (l+1)*(p+1); set <int> spr; bool pow_1; bool pow_2; if (l == 0) { if (b.size() >= 2) { spr.insert(b[0]); spr.insert(b[1]); if (spr.count(n) && spr.count(n-1)) { wynik++; pow_1 = true; } for (int i = 2; i < b.size()-1; i++) { spr.insert(b[i]); pow_1 = true; for (int j = n; j >= n-i; j--) { if (spr.count(j) == false) { pow_1 = false; } } if (pow_1 == true) { wynik++; } } } }else if(p == 0){ if (b.size() >= 2) { spr.insert(b[b.size()-1]); spr.insert(b[b.size()-2]); if (spr.count(n) && spr.count(n-1)) { wynik++; pow_2 = true; } for (int i = 2; i < b.size()-1; i++) { spr.insert(b[b.size()-1-i]); pow_2 = true; for (int j = n; j >= n-i; j--) { if (spr.count(j) == false) { pow_2 = false; } } if (pow_2 == true) { wynik++; } } } } if (b[0] >= mediana && b[b.size()-1] >= mediana) { if (b.size() > 1) { wynik++; } return; }else{ wynik--; zliczanie(b, mediana); } } int main() { cin >> n; vector <int> oceny(n); for (int i = 0; i < n; i++) { cin >> oceny[i]; } pierw = oceny[0]; ost = oceny[n-1]; double med = (n+1)/2; zliczanie(oceny, med); cout << n*2+1 << " " << wynik << 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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | #include <iostream> #include <vector> #include <set> using namespace std; long long wynik = 0; double n; int pierw; int ost; void zliczanie(vector <int> a, double mediana){ int l = 0; long long p = a.size()-1; while (a[l] < mediana) { l++; } while (a[p] < mediana) { p--; } vector <int> b; for (long i = l; i <= p; i++) { b.push_back(a[i]); } p = a.size()-1-p; mediana += (l+p)*0.5; wynik += (l+1)*(p+1); set <int> spr; bool pow_1; bool pow_2; if (l == 0) { if (b.size() >= 2) { spr.insert(b[0]); spr.insert(b[1]); if (spr.count(n) && spr.count(n-1)) { wynik++; pow_1 = true; } for (int i = 2; i < b.size()-1; i++) { spr.insert(b[i]); pow_1 = true; for (int j = n; j >= n-i; j--) { if (spr.count(j) == false) { pow_1 = false; } } if (pow_1 == true) { wynik++; } } } }else if(p == 0){ if (b.size() >= 2) { spr.insert(b[b.size()-1]); spr.insert(b[b.size()-2]); if (spr.count(n) && spr.count(n-1)) { wynik++; pow_2 = true; } for (int i = 2; i < b.size()-1; i++) { spr.insert(b[b.size()-1-i]); pow_2 = true; for (int j = n; j >= n-i; j--) { if (spr.count(j) == false) { pow_2 = false; } } if (pow_2 == true) { wynik++; } } } } if (b[0] >= mediana && b[b.size()-1] >= mediana) { if (b.size() > 1) { wynik++; } return; }else{ wynik--; zliczanie(b, mediana); } } int main() { cin >> n; vector <int> oceny(n); for (int i = 0; i < n; i++) { cin >> oceny[i]; } pierw = oceny[0]; ost = oceny[n-1]; double med = (n+1)/2; zliczanie(oceny, med); cout << n*2+1 << " " << wynik << endl; return 0; } |