Advertisement
ke_timofeeva7

залупа со спарсами и двумя и бинпоисками

Nov 10th, 2022 (edited)
691
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.09 KB | None | 0 0
  1. /*
  2. ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀       ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀           ⢀⣠⡯⠀⠀⠀⢠⡐⠀⠀⠀⠀⠀
  3. ⠀⠀⠀⢀⣤⠔⠂⠀⠀⠀⢤⣤⣤⣤⣄⣀⣀⣀⣀⡀⠀⢀⣀⣀⣀⡀⠀⠀⠀⢀⢀⣀⣠⣤⣴⣶⣾⠉⠉⠙⣶⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀   ⠀⣰⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀
  4. ⠀⠀⠰⣿⣷⣾⣿⣷⣴⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠉⠛⢿⣿⣿⣿⣿⣿⣿⣿⠿⠿⣿⣶⣿⣿⣿⣿⣤⣂⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣤⣤⣤⣴⣦⣾⣿⣿⣿⣶⣦⣴⣶⣶⠀
  5. ⠀⠀⠀⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣤⣶⣶⣿⣿⣿⣿⣿⣿⣿⣯⣤⣤⣿⡿⠿⠿⠿⠛⠛⠛⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣽⣿⣿⡟⢻⣿⣿⣿⡟⣿⣿⣿⣿⠉⠉⠁⠀
  6. ⠀⠀⠀⣹⣟⣿⣦⠈⠻⠋⢉⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣠⣾⣿⣿⣏⣤⣾⣿⣿⣿⡆⠀
  7. ⠀⠀⢀⣿⣿⣿⣿⣦⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠟⢿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡧⠀
  8. ⠀⠀⢸⣿⣿⣿⣿⣿⡀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡈⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⡄⠀
  9. ⠀⠀⠈⠿⠿⠁⣿⣿⣿⠎⠻⣯⠉⠉⠉⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⢹⣿⢻⠉⠉⠁⠈⠻⢦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠁⠉⠙⠛⠛⢿⣿⠟⠋⠁⠀⠀⠀⠈⠀
  10. ⠀⠀⠀⠀⠀⠀⢹⣿⡟⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⠞⠀⠀⠀⠀⠀⠀⠙⠳⠤⠤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀    ⠀⠀⠀⠁⠀⠀⠀⠀⠀⠸⣿⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀
  11. ⠀⠀⠀⠀⠀⠀⢈⡟⠇⠀⠀⠀⠀⠈⠁⠤⠤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣶⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀     ⠀⠀⠀⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
  12. ⠀⠀⠀⠀⠀⠀⠀⠙⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⠂⠀⠀⠀⠀  ⠀⠀⠀⠀⠀⠀⠀⠀                             ⠀⠀⡘⡀⠀
  13.                                          ⠀⠀⠀⠀⠀⠀                         ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
  14. */
  15. #include <iostream>
  16. #include <string>
  17. #include <sstream>
  18. #include <cmath>
  19. #include <memory.h>
  20. #include <algorithm>
  21. #include <stack>
  22. #include <deque>
  23. #include <iomanip>
  24. #include <stdio.h>
  25. #include <queue>
  26. #include <map>
  27. #include <set>
  28. #include <unordered_map>
  29. #include <unordered_set>
  30. #include <random>
  31. #include <ctime>
  32. #include <cstdlib>
  33. #include <cassert>
  34. #include <iterator>
  35. #include <chrono>
  36. #include <array>
  37. #include <bitset>
  38. #define int long long
  39. #define itn long long
  40. #define fro for
  41. #define intt __int128
  42. #define pii pair <int, int>
  43. #define debug(x) cerr << (#x) << " " << (x) << endl
  44. #define pb push_back
  45. #define all(vc) vc.begin(), vc.end()
  46. #define fir first
  47. #define sec second
  48. #define endl "\n"
  49. #define un unsigned
  50. #define INF 1000000010
  51. #define double long double
  52. using namespace std;
  53.  
  54. const int N = 1000005, R = 1 << 20, ABC = 26, logn = 19;
  55. const int BUBEN = 1001;
  56.  
  57. mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
  58.  
  59. bool check(vector<int>&logs, vector<vector<int>>&sp_min, vector<vector<int>> &sp_max, itn i, int m) {
  60.     int lvl = logs[m - i + 1];
  61.     int mn = min(sp_min[lvl][i], sp_min[lvl][m - (1 << lvl) + 1]);
  62.     int mx = max(sp_max[lvl][i], sp_max[lvl][m - (1 << lvl) + 1]);
  63.  
  64.     if (mn < mx)
  65.         return 1;
  66.     else
  67.         return 0;
  68. }
  69.  
  70. bool check1(vector<int>& logs, vector<vector<int>>& sp_min, vector<vector<int>>& sp_max, itn i, int m) {
  71.     int lvl = logs[m - i + 1];
  72.     int mn = min(sp_min[lvl][i], sp_min[lvl][m - (1 << lvl) + 1]);
  73.     int mx = max(sp_max[lvl][i], sp_max[lvl][m - (1 << lvl) + 1]);
  74.  
  75.     if (mn <= mx)
  76.         return 1;
  77.     else
  78.         return 0;
  79. }
  80.  
  81. bool rv(vector<int>& logs, vector<vector<int>>& sp_min, vector<vector<int>>& sp_max, itn i, int m) {
  82.     int lvl = logs[m - i + 1];
  83.     int mn = min(sp_min[lvl][i], sp_min[lvl][m - (1 << lvl) + 1]);
  84.     int mx = max(sp_max[lvl][i], sp_max[lvl][m - (1 << lvl) + 1]);
  85.  
  86.     if (mn == mx)
  87.         return 1;
  88.     else
  89.         return 0;
  90. }
  91.  
  92. signed main() {
  93.     ios_base::sync_with_stdio(0);
  94.     cin.tie(0);
  95.     cout.tie(0);
  96.     srand(time(0));
  97.     cout.precision(17);
  98.  
  99.     int n;
  100.     cin >> n;
  101.  
  102.     vector<int> a(n), b(n);
  103.  
  104.     for (int& i : a)
  105.         cin >> i;
  106.     for (int& i : b)
  107.         cin >> i;
  108.  
  109.     vector<int> logs(n + 1);
  110.     logs[1] = 0;
  111.     for (int i = 2; i <= n; i++) {
  112.         logs[i] = logs[i / 2] + 1;
  113.     }
  114.  
  115.     vector<vector<int>> sp_min(logs[n] + 1, vector<int>(n));
  116.     vector<vector<int>> sp_max(logs[n] + 1, vector<int>(n));
  117.  
  118.     for (int i = 0; i < n; i++) {
  119.         sp_min[0][i] = b[i];
  120.         sp_max[0][i] = a[i];
  121.     }
  122.  
  123.     for (int i = 1; (1LL << i) <= n; i++) {
  124.         for (int j = 0; j + (1LL << i) - 1 < n; j++) {
  125.             sp_min[i][j] = min(sp_min[i - 1][j], sp_min[i - 1][j + (1LL << (i - 1))]);
  126.             sp_max[i][j] = max(sp_max[i - 1][j], sp_max[i - 1][j + (1LL << (i - 1))]);
  127.         }
  128.     }
  129.  
  130.     int ans = 0;
  131.  
  132.     for (int i = 0; i < n; i++) {
  133.         int l = i, r = n;
  134.  
  135.         while (r - l > 1) {
  136.             int m = (r + l) / 2;
  137.             if (check(logs, sp_min, sp_max, i, m))
  138.                 r = m;
  139.             else
  140.                 l = m;
  141.         }
  142.  
  143.         int ll = i, rr = n;
  144.         while (rr - ll > 1) {
  145.             int m = (rr + ll) / 2;
  146.             if (check1(logs, sp_min, sp_max, i, m))
  147.                 rr = m;
  148.             else
  149.                 ll = m;
  150.         }
  151.  
  152.         ans += (l - ll) + rv(logs, sp_min, sp_max, i, ll);
  153.     }
  154.  
  155.     cout << ans;
  156.     return 0;
  157. }
  158.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement