<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      莫隊2 這次需要帶修改了

      莫隊2 這次需要帶修改了

      莫隊1 走上騙分之路

      實現修改

      莫隊是不支持修改的, 但是有后人加以改進, 就有了代修版本.

      我們現在有一個東西叫時間軸 (類似函數式線段樹的每個根都是關于某次之前的根修改或查詢的), 每次詢問都記錄一下當前的時間軸, 每次修改都在時間軸上新建一個版本.

      typedef struct _qryy {
        int l, r;
        int t, i;
      } qryy;
      

      這次要可以 \(O(1)\)\(([l, r], t)\) 擴展到 \(([l \pm 1, r], t)\), \(([l, r \pm 1], t)\)\(([l, r], t \pm 1)\).

      現在的排序第一關鍵字是 \(l\) 所在的塊, 第二關鍵字是 \(r\), 第三關鍵字是 \(t\).

      然后在記錄修改的位置和值.

      typedef struct _updd {
        int x, k;
      } updd;
      

      這次舉例單點修區間和

      1 x k \(a_{x} := a_{x} + k\)
      2 x y\(\displaystyle \sum_{i \in [x, y]} a_{i}\)

      樹狀數組1.

      顯然這是樹狀數組/線段樹板子, 但是我們還是在討論莫隊.

      VJudge LuoGu

      由于莫隊本身復雜度玄學, Defad只得到了 70 分, 當然也可能是Defad在分塊時分的不夠好或各種玄學優化不會, 得分比Defad高可以在評論區發一下您怎么優化的.

      int cmp(const void *a, const void *b) {
        qryy *x = (qryy*)(a), *y = (qryy*)(b);
        if (pos[x->l] ^ pos[y->l]) {
          return x->l - y->l;
        } else if (pos[x->r] ^ pos[y->r]) {
          return pos[x->r] - pos[y->r];
        } else {
          return x->t - y->t;
        }
      }
      
      void get_ans() {
        int l = 1, r = 0, t = 0;
        qsort(q + 1, cntq, sizeof(q[0]), cmp);
        f1 (i, 1, cntq, 1) {
          while (l < q[i].l) {
            s -= a[l] + upd[l];
            l++;
          }
          while (q[i].l < l) {
            l--;
            s += a[l] + upd[l];
          }
          while (r < q[i].r) {
            r++;
            s += a[r] + upd[r];
          }
          while (q[i].r < r) {
            s -= a[r] + upd[r];
            r--;
          }
          while (t < q[i].t) {
            t++;
            if (q[i].l <= c[t].x && c[t].x <= q[i].r) {
              s += c[t].k; // 更新 sum
            }
            upd[c[t].x] += c[t].k; // 版本前進
          }
          while (q[i].t < t) {
            if (q[i].l <= c[t].x && c[t].x <= q[i].r) {
              s -= c[t].k; // 更新 sum
            }
            upd[c[t].x] -= c[t].k; // 版本回退
            t--;
          }
          ans[q[i].i] = s;
        }
      }
      

      例題

      VJudge LuoGu

      例題也差不多, 但是單點賦值和單點加不同, 單點賦值可以給點值和修改值交換, 下次版本回退可以在換回來.

      本題似乎塊長開到 \(N^{\cfrac{2}{3}}\) 并且在排序時看 \(l\) 所在塊和 \(r\) 所在塊和 \(t\) 才可通過.

      int cmp(const void *a, const void *b) {
        qryy *x = (qryy*)(a), *y = (qryy*)(b);
        if (pos[x->l] ^ pos[y->l]) {
          return x->l - y->l;
      //} else if (x->r ^ y->r) { // 用這個相比下方的會TLE
      //  return x->r - y->r;
        } else if (pos[x->r] ^ pos[y->r]) {
          return pos[x->r] - pos[y->r];
        } else {
          return x->t - y->t;
        }
      }
      
      void get_ans() {
        int l = 1, r = 0, t = 0;
        qsort(q + 1, cntq, sizeof(q[0]), cmp);
        f1 (i, 1, cntq, 1) {
          while (l < q[i].l) {
            s -= (--clr[a[l++]] == 0);
          }
          while (q[i].l < l) {
            s += (++clr[a[--l]] == 1);
          }
          while (r < q[i].r) {
            s += (++clr[a[++r]] == 1);
          }
          while (q[i].r < r) {
            s -= (--clr[a[r--]] == 0);
          }
          while (t < q[i].t) {
            t++;
            if (q[i].l <= c[t].x && c[t].x <= q[i].r) {
              s -= (--clr[a[c[t].x]] == 0);
              s += (++clr[c[t].k] == 1);
            }
            c[t].k ^= a[c[t].x];
            a[c[t].x] ^= c[t].k;
            c[t].k ^= a[c[t].x];
          }
          while (q[i].t < t) {
            if (q[i].l <= c[t].x && c[t].x <= q[i].r) {
              s -= (--clr[a[c[t].x]] == 0);
              s += (++clr[c[t].k] == 1);
            }
            c[t].k ^= a[c[t].x];
            a[c[t].x] ^= c[t].k;
            c[t].k ^= a[c[t].x];
            t--;
          }
          ans[q[i].i] = s;
        }
      }
      
      posted @ 2024-12-13 01:36  young_tea  閱讀(19)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品国产片一区二区三区| 天天爽天天摸天天碰| 麻豆亚洲自偷拍精品日韩另| 国内自拍av在线免费| 五月丁香啪啪| av新版天堂在线观看| 九九热在线视频观看这里只有精品| 男女做aj视频免费的网站| 亚洲熟女乱综合一区二区| 又粗又硬又黄a级毛片| 久久天堂无码av网站| 国产精品无码久久久久AV| 亚洲国产免费图区在线视频 | 九九热视频在线观看精品| 日韩精品国产另类专区| 欧美日本一区二区视频在线观看| 一区二区三区四区国产综合| 精品人妻免费看一区二区三区| 国产精品午夜福利在线观看| 亚洲成在人天堂一区二区| 丝袜人妻一区二区三区网站| 亚洲色成人一区二区三区人人澡人人妻人人爽人人蜜桃麻豆 | 色婷婷综合久久久久中文一区二区| 国产精品十八禁在线观看| 一本精品中文字幕在线| 草草浮力地址线路①屁屁影院| 亚洲成亚洲成网| 日韩精品国产中文字幕| 亚洲国产另类久久久精品小说| 国内熟妇人妻色在线视频| 日韩精品区一区二区三vr| 色吊丝永久性观看网站| 国产精品国产精品偷麻豆| 日本福利一区二区精品| 色橹橹欧美在线观看视频高清| 一区二区三区四区自拍视频| 国产熟睡乱子伦视频在线播放| 工布江达县| 色综合天天色综合久久网| 精品国精品自拍自在线| 精品亚洲国产成人av|