zhukov000

stress_example

Nov 5th, 2021
557
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.24 KB | None | 0 0
  1. # include <bits/stdc++.h>
  2. //#pragma GCC optimize("Ofast")
  3. //#pragma GCC optimize("O3")
  4. //#pragma GNU optimize("O3")
  5. //#pragma G++ optimize("O3")
  6. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  7. //#pragma G++ optimize("no-stack-protection")
  8. #define int long long
  9. # define sz(x) ((int)(x).size())
  10. # define INF (long long)1e9+1
  11. # define mp(a, b) make_pair(a, b)
  12. # define all(x) x.begin(), x.end()
  13. using namespace std;
  14. typedef pair<int, int> pii;
  15. template<class T> void print(T v) {for (auto &x : v) cout << x << ' '; cout << '\n'; };
  16. template<class T> void print_1(T v) {for (auto &x : v) cout << x + 1 << ' '; cout << '\n'; };
  17.  
  18. /*==input-define==*/
  19.  
  20. #define input(v, sz) for(int i = 0; i < sz; ++i) {int x; cin >> x; v.emplace_back(x);}
  21.  
  22. /*==templates-for-pairs==*/
  23. #define fi first
  24. #define se second
  25. template<class T1, class T2> ostream& operator << (ostream &o, pair<T1, T2> x) {return o << x.fi << ' ' << x.se;}
  26. template<class T1, class T2> istream& operator >> (istream &o, pair<T1, T2> &x) {return o >> x.fi >> x.se;}
  27. template<class T1, class T2> pair<T1, T2> operator + (pair<T1, T2> a, pair<T1, T2> b) {a.fi += b.fi; a.se += b.se; return a;}
  28. template<class T1, class T2> pair<T1, T2> operator - (pair<T1, T2> a, pair<T1, T2> b) {a.fi -= b.fi; a.se -= b.se; return a;}
  29. template<class T1, class T2> void operator += (pair<T1, T2> &a, pair<T1, T2> b) {a.fi += b.fi; a.se += b.se;}
  30. template<class T1, class T2> void operator -= (pair<T1, T2> &a, pair<T1, T2> b) {a.fi -= b.fi; a.se -= b.se;}
  31.  
  32. void fastio()
  33. {
  34.     ios_base::sync_with_stdio(false);
  35.     cin.tie(nullptr);
  36.     cout.tie(nullptr);
  37. }
  38.  
  39. /*
  40. @author: Shvandre
  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. vector<int> a;
  86. int n, m;
  87.  
  88. struct Command {
  89.     char t;
  90.     int p[3];
  91. };
  92.  
  93. vector<Command> cmd;
  94.  
  95. struct NODE
  96. {
  97.     int zeros_cnt = 0;
  98.     NODE(int _value)
  99.     {
  100.         zeros_cnt = _value;
  101.     }
  102. };
  103. struct seg_tree
  104. {
  105.     vector<NODE> tree;
  106.     seg_tree(int n)
  107.     {
  108.         tree.assign(4*n, NODE(0));
  109.     }
  110.     NODE combine(NODE v1, NODE v2)
  111.     {
  112.         return NODE(v1.zeros_cnt + v2.zeros_cnt);
  113.     }
  114.     void build(int x, int lx, int rx)
  115.     {
  116.         if(rx - lx == 1)
  117.         {
  118.             if(a[lx] == 0)
  119.                 tree[x] = NODE(1);
  120.             else
  121.                 tree[x] = NODE(0);
  122.             return;
  123.         }
  124.         int m = (lx+rx) / 2;
  125.         build(x*2+1, lx, m);
  126.         build(x*2+2, m, rx);
  127.         tree[x] = combine(tree[x*2+1], tree[x*2+2]);
  128.     }
  129.     void set(int i, int value, int x, int lx, int rx)
  130.     {
  131.         if(rx - lx == 1)
  132.         {
  133.             if(value == 0)
  134.                 tree[x] = NODE(1);
  135.             else
  136.                 tree[x] = NODE(0);
  137.             return;
  138.         }
  139.         int m = (lx+rx) / 2;
  140.         if(i < m)
  141.         {
  142.             set(i, value, x*2+1, lx, m);
  143.         }
  144.         else
  145.         {
  146.             set(i, value, x*2+2, m, rx);
  147.         }
  148.         tree[x] = combine(tree[x*2+1], tree[x*2+2]);
  149.     }
  150.     int ask(int k, int R, int x, int lx, int rx)
  151.     {
  152.         if(rx - lx == 1)
  153.         {
  154.             if(lx >= R) return -2; //TODO
  155.             return lx;
  156.         }
  157.         int m = (lx + rx) / 2;
  158.         if (tree[x*2+1].zeros_cnt + tree[x*2+2].zeros_cnt < k)
  159.         {
  160.             return -2;
  161.         }
  162.         else if(tree[x*2+1].zeros_cnt < k)
  163.         {
  164.             return ask(k - tree[x*2+1].zeros_cnt, R,  x*2+2, m, rx);
  165.         }
  166.         else
  167.         {
  168.             return ask(k, R, x*2 + 1, lx, m);
  169.         }
  170.     }
  171.     NODE zero_count_until_Segment(int l, int r, int LX, int RX, int idx)
  172.     {
  173.         if(l >= RX || r <= LX) return 0;
  174.         if(l <= LX && RX <= r) return tree[idx];
  175.         int m = (RX + LX) / 2;
  176.         return combine(zero_count_until_Segment(l, r, LX, m, idx*2+1), zero_count_until_Segment(l, r, m, RX, idx*2+2));
  177.     }
  178. };
  179.  
  180. vector<int> solve() {
  181.     vector<int> r;
  182.     seg_tree my_tree(n);
  183.     my_tree.build(0, 0, n);
  184.     for(int i = 0; i < m; ++i)
  185.     {
  186.         if(cmd[i].t == 'u')
  187.         {
  188.             int idx = cmd[i].p[0], value = cmd[i].p[1];
  189.             my_tree.set(idx - 1, value, 0, 0, n);
  190.         }
  191.         else {
  192.             int L = cmd[i].p[0], R = cmd[i].p[1], k = cmd[i].p[2];
  193.             int zero_cnt = my_tree.zero_count_until_Segment(0, L - 1, 0, n, 0).zeros_cnt;
  194.             r.push_back(my_tree.ask(zero_cnt + k, R, 0, 0, n) + 1);
  195.         }
  196.     }
  197.     return r;
  198. }
  199.  
  200. vector<int> slow() {
  201.     vector<int> r;
  202.     vector<int> b = a;
  203.     for(int i = 0; i < m; ++i)
  204.     {
  205.         if(cmd[i].t == 'u')
  206.         {
  207.             int idx = cmd[i].p[0], value = cmd[i].p[1];
  208.             b[idx-1] = value;
  209.         }
  210.         else {
  211.             int L = cmd[i].p[0], R = cmd[i].p[1], k = cmd[i].p[2];
  212.             int ans = -1, t = 0;
  213.  
  214.             for(int j = L-1; j < R; ++j) {
  215.                 if (b[j] == 0) {
  216.                     ++t;
  217.                 }
  218.                 if (t == k) {
  219.                     ans = j + 1;
  220.                     break;
  221.                 }
  222.             }
  223.  
  224.             r.push_back(ans);
  225.         }
  226.     }
  227.     return r;
  228. }
  229.  
  230. void read_data() {
  231.     fastio();
  232.     cin >> n;
  233.     input(a, n)
  234.     cin >> m;
  235.     cmd.resize(m);
  236.     for(int i = 0; i < m; ++i)
  237.     {
  238.         cin >> cmd[i].t;
  239.         if(cmd[i].t == 'u')
  240.         {
  241.             cin >> cmd[i].p[0] >> cmd[i].p[1];
  242.         } else {
  243.             cin >> cmd[i].p[0] >> cmd[i].p[1] >> cmd[i].p[2];
  244.         }
  245.     }
  246. }
  247.  
  248. void print_data() {
  249.     cout << n << '\n';
  250.     for(auto x: a) {
  251.         cout << x << ' ';
  252.     }
  253.     cout << '\n' << m << '\n';
  254.     for(auto c: cmd) {
  255.         if (c.t == 'u') {
  256.             cout << c.t << ' ' << c.p[0] << ' ' << c.p[1] << '\n';
  257.         } else {
  258.             cout << c.t << ' ' << c.p[0] << ' ' << c.p[1] << ' ' << c.p[2] << '\n';
  259.         }
  260.     }
  261. }
  262.  
  263. // [0, MAXRND)
  264. int gen_int(int a, int b) {
  265.     return rand() % (b - a + 1) + a;
  266. }  
  267.  
  268. void gen_data() {
  269.     srand(time(NULL));
  270.     const int MAXN = 20,  MAXM = 10;
  271.    
  272.     n = gen_int(1, MAXN);
  273.     a.resize(n);
  274.     for(size_t i=0; i<n; ++i) {
  275.         a[i] = gen_int(0, 100);
  276.     }
  277.    
  278.     m = gen_int(1, MAXM);
  279.     cmd.resize(m);
  280.     for(size_t i=0; i<n; ++i) {
  281.         if (gen_int(0, 1) == 0) {
  282.             cmd[i].t = 'u';
  283.             cmd[i].p[0] = ; // TODO
  284.             cmd[i].p[1] = ; // TODO
  285.         } else {
  286.             cmd[i].t = 's';
  287.             cmd[i].p[0] = ; // TODO
  288.             cmd[i].p[1] = ; // TODO
  289.             cmd[i].p[2] = ; // TODO
  290.         }
  291.     }
  292. }
  293.  
  294. int32_t main()
  295. {
  296.     // read_data();
  297.     while(true) {
  298.         gen_data();
  299.         if (slow() != solve()) {
  300.             print_data();
  301.             break;
  302.         }
  303.     }
  304. }
Advertisement
Add Comment
Please, Sign In to add comment