亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

HDU - 1166 CDQ分治

2019-11-11 03:33:58
字體:
來源:轉載
供稿:網友

題意:

樹狀數組的入門題,單點修改,區間求和。

思路:

這題是最基礎的BIT,也可以用cdq分治來做。簡單地介紹一下cdq分治。cdq分治是一種特殊的分治法,只能支持離線操作,往往可以替代復雜的數據結構,而且具有常數較小的優點。cdq分治的基本思想:1. 對于一段序列[L,R);2. 將其從中間分成兩個部分[L,M),[M.R),并遞歸處理子問題。3. 歸并時要考慮左半部分[L,M)對于右半部份[M,R)的結果的影響。cdq分治和普通分治最大的區別在于,普通分治在歸并的時候左右兩邊是互不影響的,但是cdq分治中要考慮左半部分對于右半部份的影響。舉個典型的cdq分治的例子,就是歸并排序。對于下標屬于區間[L,R)中的數排序,那就按照上面的思想,先分成左右兩個區間,并且遞歸處理,最后使得[L,M)和[M,R)這兩個部分內部都變成有序的,然后在合并的時候,[L,M)這部分的數會對[M,R)這部分的數產生影響,需要下標p和q分別從L和M處開始遍歷并相互比較,在臨時數組tmp中排序,最后再把臨時數組還原到原數組中。依據同樣的思想,cdq分治也可以解決二維,三維偏序問題。除了以上所說的,cdq分治的一個很大的用途是用來解決有修改,查詢的問題。把查詢和修改都當作有序對來處理。

HDU-1166這題,我們把他轉化成一個二維偏序問題,每個操作用一個有序對(a,b)表示,其中a表示操作到來的時間,b表示操作的位置,時間是默認有序的,所以我們在合并子問題的過程中,就按照b從小到大的順序合并。

關鍵是如何表示查詢和修改,用結構體Query統一標識查詢和修改,其中包含三個元素,type,pos,val。其中查詢[L,R]的和看作兩個部分組成查詢sum[R]和sum[L-1]。

1.type為1時表示修改操作,pos是修改的位置,val是添加的值。

2.type為2時表示針對左端點的前綴和查詢,pos是左端點位置,val是該查詢的編號,為了方便記錄答案。

3.type為3時表示針對右端點的前綴和查詢,pos是右端點位置,val是查詢編號。

代碼中的ans數組儲存對于詢問的答案。按照cdq分治的思路,因為各個操作的時間順序已經默認,所以就直接將所有操作放入que數組中進行分治,為了方便討論所有區間都是左閉右開,對于下標為[L,R)的區間,先分成[L,M)和[M,R)遞歸處理,然后歸并,要考慮左部分的修改,對于右部分的查詢造成的影響,對于本題來說就是左部分修改操作后的變化量和,對于查詢操作,要查詢的是sum[R]-sum[L],這里L位置之前的修改操作的變化量和add都會對其有影響,如果查詢的pos是左端點,ans[id]要減去add,若是右端點,ans[id]要加上add。

具體細節需要到代碼中領悟。

代碼:

#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN = 50005;const int MAXM = 40005;const int MAXQ = MAXM * 2 + MAXN;struct Query {    int type, pos, val;    bool Operator < (const Query &rhs) const {        return pos == rhs.pos ? type < rhs.type : pos < rhs.pos;  // 同一位置,修改操作要先于查詢操作    }}que[MAXQ], tmp[MAXQ];int ans[MAXQ];int qnum, anum;     // qnum表示所有有序對的個數,anum表示詢問操作的個數void cdq(int l, int r) {    if (l + 1 >= r) return;    int m = (l + r) >> 1;    cdq(l, m); cdq(m, r);    int p = l, q = m, cnt = 0, sum = 0;    while (p < m && q < r) {         // 類似歸并排序的模式,換成了處理有序對        if (que[p] < que[q]) {            if (que[p].type == 1) sum += que[p].val;   // 左半部分先發生的修改操作,保存變化量的和sum            tmp[cnt++] = que[p++];        }        else {            if (que[q].type == 2) ans[que[q].val] -= sum;       // 左端點查詢減去sum            else if (que[q].type == 3) ans[que[q].val] += sum;      // 右端點查詢加上sum            tmp[cnt++] = que[q++];        }    }    while (p < m) tmp[cnt++] = que[p++];    while (q < r) {        if (que[q].type == 2) ans[que[q].val] -= sum;        else if (que[q].type == 3) ans[que[q].val] += sum;        tmp[cnt++] = que[q++];    }    for (int i = 0; i < cnt; i++)       // 利用臨時數組更新操作數組que        que[i + l] = tmp[i];}char op[10];int main() {    //freopen("in.txt", "r", stdin);    int T, cs = 0;    scanf("%d", &T);    while (T--) {        int n, x;        scanf("%d", &n);        qnum = anum = 0;        for (int i = 1; i <= n; i++, qnum++) {            scanf("%d", &x);            que[qnum] = (Query) {1, i, x};        }        while (true) {            scanf("%s", op);            if (op[0] == 'E') break;            if (op[0] == 'Q') {                int l, r;                scanf("%d%d", &l, &r);                que[qnum++] = (Query) {2, l - 1, anum};                que[qnum++] = (Query) {3, r, anum++};            }            else {                int pos, add;                scanf("%d%d", &pos, &add);                add *= (op[0] == 'A' ? 1 : -1);                que[qnum++] = (Query) {1, pos, add};            }        }        memset(ans, 0, sizeof(ans));      // 記得ans清零        cdq(0, qnum);        PRintf("Case %d:/n", ++cs);        for (int i = 0; i < anum; i++)            printf("%d/n", ans[i]);    }    return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩精品综合网站| 中文字幕成人在线| 亚洲成人免费在线视频| 日韩视频免费中文字幕| 97精品视频在线观看| 欧美影院久久久| 久久的精品视频| 91色p视频在线| 日韩不卡中文字幕| 久久久久久尹人网香蕉| 97国产成人精品视频| 久久精品电影一区二区| 亚洲人成电影网站色xx| 在线看欧美日韩| 欧美成人激情图片网| 777777777亚洲妇女| 一区二区三区无码高清视频| 高清欧美一区二区三区| 日韩电视剧免费观看网站| 97国产真实伦对白精彩视频8| 精品久久久久久久久国产字幕| 日韩av大片在线| 秋霞成人午夜鲁丝一区二区三区| 在线观看欧美日韩国产| 精品中文字幕在线2019| 亚洲美女精品成人在线视频| 亚洲日本aⅴ片在线观看香蕉| 国产乱肥老妇国产一区二| 国产精品美腿一区在线看| 欧美一级免费视频| 一区二区日韩精品| 亚洲欧美精品一区| 久久综合伊人77777尤物| 91国产精品91| 欧美日本国产在线| 欧美中文字幕精品| 亚洲剧情一区二区| 一本色道久久88综合日韩精品| 亚洲国产精品大全| 亚洲精品永久免费| 懂色av影视一区二区三区| www.日本久久久久com.| 国产精品黄页免费高清在线观看| 91精品国产自产在线观看永久| 欧美精品激情在线观看| 午夜精品久久久久久99热软件| 高跟丝袜欧美一区| 亚洲视频一区二区| 精品国产91久久久久久| 欧美激情在线播放| 亚洲成人激情在线| 国产精品老牛影院在线观看| 国内外成人免费激情在线视频网站| 菠萝蜜影院一区二区免费| 色妞久久福利网| 黑人狂躁日本妞一区二区三区| 欧美性猛交xxxx乱大交| 国产精品视频午夜| 欧美在线视频一区| 久久精品成人欧美大片| 91亚洲精品在线| 国产视频精品在线| 国产精品男女猛烈高潮激情| 久久69精品久久久久久国产越南| 欧美在线一级va免费观看| 91久久精品一区| 久久精品成人欧美大片古装| 国产精品88a∨| 日本欧美中文字幕| 欧美亚洲另类在线| 久久91亚洲精品中文字幕| 欧美亚洲另类激情另类| 久久久久久尹人网香蕉| 亚洲人a成www在线影院| 久久伊人精品一区二区三区| 在线国产精品视频| 国产精品旅馆在线| 尤物tv国产一区| 亚洲国产日韩欧美综合久久| 日韩欧美亚洲范冰冰与中字| 91久久精品视频| 亚洲欧美激情精品一区二区| 欧美激情亚洲激情| 国产一区二区三区视频在线观看| 91精品国产综合久久男男| 久久精品99无色码中文字幕| 成人黄色午夜影院| 亚洲美女黄色片| 亚洲一区二区久久| 91夜夜揉人人捏人人添红杏| 久久久99久久精品女同性| 国产精品久久av| 国产精品pans私拍| 日韩中文在线中文网在线观看| 欧美性xxxxxxxxx| 日韩电影在线观看中文字幕| 日本精品va在线观看| 另类少妇人与禽zozz0性伦| 91亚洲精品一区二区| 66m—66摸成人免费视频| 青青草精品毛片| 国产精品久久电影观看| 国产欧美精品久久久| 狠狠色狠色综合曰曰| 欧美激情亚洲激情| 欧美专区在线播放| 精品视频在线播放色网色视频| 国内精品视频久久| 欧美大肥婆大肥bbbbb| 国产精品成人在线| 亚洲丝袜一区在线| 久久精品视频一| 国产区精品在线观看| 狠狠躁夜夜躁人人躁婷婷91| 久久久久日韩精品久久久男男| 欧美巨大黑人极品精男| 亚洲天堂av在线免费观看| 91伊人影院在线播放| 亚洲天堂网站在线观看视频| 亚洲欧美色婷婷| 久久人人看视频| 国产精品色悠悠| 国产精品wwww| 国产中文字幕亚洲| 51色欧美片视频在线观看| 欧美高清视频一区二区| 最近更新的2019中文字幕| 亚洲丁香婷深爱综合| 久久久天堂国产精品女人| 91精品久久久久久久久久另类| 亚洲人成网站在线播| 一本色道久久88综合日韩精品| 91在线观看欧美日韩| 精品久久久久久中文字幕大豆网| 久久久成人的性感天堂| 欧美成人精品三级在线观看| 亚洲精品国产电影| 日韩高清电影好看的电视剧电影| 亚洲精品v欧美精品v日韩精品| 国产精品视频白浆免费视频| 91国语精品自产拍在线观看性色| 国语自产精品视频在线看一大j8| 国产欧美最新羞羞视频在线观看| 中文字幕日韩av| 久久精品国产亚洲7777| 成人有码在线播放| 欧美福利视频在线| 欧美孕妇孕交黑巨大网站| 亚洲永久在线观看| 97精品国产97久久久久久春色| 亚洲专区国产精品| 亚洲电影免费观看| 精品国产乱码久久久久久婷婷| 亚洲日韩中文字幕在线播放| 亚洲国产日韩欧美在线99| 狠狠躁夜夜躁人人躁婷婷91| 91精品久久久久久久久久| 亚洲国产成人久久综合一区| 成人亲热视频网站| 一区二区三区四区在线观看视频| 夜夜嗨av一区二区三区免费区| 91chinesevideo永久地址| 色www亚洲国产张柏芝| 久久久噜噜噜久久|