洛谷 1972 莫隊

2022-04-07 04:37:34 字數 1340 閱讀 4597

#洛谷 1972 莫隊演算法

傳送門其實這道題的標答應該是樹狀陣列或者線段樹吧,,,如果我沒記錯的話曾經是做過類似題目的,,,

然而,,然而,,

好吧開始正題,這道題目我選擇的是莫隊演算法,引用一下某大犇的話

暴力出奇蹟,對拍保平安

先來討論一下莫隊演算法的適用條件:

莫隊演算法的核心思想其實就是通過調整暴力的順序來優雅的暴力,首先把所有詢問按照左端點排序,對n進行分塊,將詢問塊按照l放入塊中,然後對於每塊按照右端點進行排序,之後暴力掃瞄,得解

資料資料2

最後%%%%%%mt大牛

#include #include #include #include #include const int maxn = 50000 + 100;

const int maxm = 200000 + 200;

struct task;

task p[maxm];

int ans[maxm];

int sum[1001000];

int tl, tr, tres;

int a[maxn];

int n, m;

int blocksize;

int blocknum;

bool cmp1(task aa, task bb)

bool cmp2(task aa, task bb)

int main ()

std :: sort(p + 1, p + m + 1, cmp1);

blocksize = (int)sqrt(n) + 1;

blocknum = n / blocksize;

int b = 1;

int j;

for (int i = 1; i < blocknum; i++)

std :: sort(&p[b], &p[m + 1], cmp2);

tl = 1, tr = 0, tres = 0;

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

} else if (p[i].l > tl)

}tl = p[i].l;

if (p[i].r > tr)

} else if (p[i].r < tr)

}tr = p[i].r;

ans[p[i].num] = tres;

}for (int i = 1; i <= m; i++) printf("%d\n", ans[i]);

return 0;

}

洛谷 1972 莫隊

傳送門 其實這道題的標答應該是樹狀陣列或者線段樹吧,如果我沒記錯的話曾經是做過類似題目的,然而,然而,好吧開始正題,這道題目我選擇的是莫隊演算法,引用一下某大犇的話 暴力出奇蹟,對拍保平安 先來討論一下莫隊演算法的適用條件 莫隊演算法的核心思想其實就是通過調整暴力的順序來優雅的暴力,首先把所有詢問按...

洛谷P1972(莫隊演算法)

hh 有一串由各種漂亮的貝殼組成的項鍊。hh 相信不同的貝殼會帶來好運,所以每次散步完後,他都會隨意取出一段貝殼,思考它們所表達的含義。hh 不斷地收集新的貝殼,因此,他的項鍊變得越來越長。有一天,他突然提出了乙個問題 某一段貝殼中,包含了多少種不同的貝殼?這個問題很難回答 因為項鍊實在是太長了。於...

洛谷小B的詢問(莫隊)

p2709 小b的詢問 題目描述 小b有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l r 求sigma c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l r 中的重複次數。小b請你幫助他回答詢問。輸入輸出格式 輸入格式 第一行,三個整數n m k。...