codeforces 617E 莫隊入門

2021-08-10 02:44:00 字數 830 閱讀 3426

莫隊演算法就是現將上所有的點分成sqrt(n)塊,然後將要查詢的區間離線起來,然後進行對[l,r]變到[l - 1,r] 、或者[l + 1,r],[l,r - 1],[l,r + 1]進行o(1)的變換。

莫隊演算法是優雅的暴力,複雜度o(nlogn)。

題意:給出乙個乙個數列,然後查詢在給出區間的異或值等於k的子區間的個數。

思路:先對區間進行去字首和處理,然後區間[l,r]的異或值為sum[r] ^sum[l - 1];然後剩下來的就是進行l,r的轉移了。

#includeusing namespace std;

#define clr(x,y) memset(x,y,sizeof x)

typedef long long ll;

const int maxn = 2e6 + 10;

int a[maxn],pos[maxn],sum[maxn];

ll num[maxn];

struct nodeq[maxn];

bool cmp(node p1,node p2)

ll ans;

int n,m,k;

void add(int x)

void del(int x)

ll ans[maxn];

int main()

while(l < q[i].l)

while(r > q[i].r)

while(r < q[i].r)

ans[q[i].id] = ans;

}for(int i = 1;i <= m;i ++)

}return 0;

}

Codeforces 976E 題解報告

1 當把所有的倍數2 a都加到同一health上,health增加的最多 2 先計算每乙個creature的hp dmg,按該值對所有的creature排序 再求和,i include using namespace std const int n 200 1000 9 int hp n dmg n...

codeforces 1030E 暴力 思維)

題目 題意 給定一些數,可將區間 l r 中某些數的二進位制位的1的位置更換,使得最終區間所有數異或和為0,求這樣的區間個數。思路 在那裡瞎dp了好久,wa的很徹底,借鑑了一下別人的思路。區間合法的條件是 這個區間1的個數為偶數,並且區間中二進位制位1最多的乙個數的二進位制個數小於等於和的一半。我們...

Codeforces 1270E 構造 數學

有 n 個二維平面上的點,每兩個點之間連一條線段,將這些點劃分為兩個非空的集合 a b 同乙個集合內的兩點之間線段用黃色標註,不同集合的兩點之間線段用藍色標註,使距離相同的線段顏色相同。先將所有點的座標以其中乙個點作為原點轉化一下,使其中必定有乙個點是 0,0 然後將所有點按奇偶分為四組 0代表偶數...