模板 莫隊演算法

2021-07-29 20:41:08 字數 846 閱讀 4486

這個演算法是由之前的國家隊隊長莫濤巨神(orz….%%%)發明的,所以尊稱莫隊演算法。

如果我們知道區間[l,r],就能在o(1)求出[l−1,r],[l+1,r],[l,r−1],[l,r+1]的話,那就可以用莫隊演算法了。

1):排序,以左段點所在的塊為第一關鍵字,以右端點為第二關鍵字

2):從左往右處理詢問(離線)

3):不斷調整l,r的位置並同時修改

題目:hh的項鍊 基本是模板題……

#include 

using

namespace

std;

struct questionqst[1110000]; //由於是離線做法,所以要開結構體存一下

int comp(const question & a,const question & b)

}

void mns(int b)

}int str[1111000];

int main()

sort(qst+1,qst+m+1,comp); //以l為第一關鍵字,以r為第二關鍵字 排序

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

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

cout

0;}

莫隊演算法在解決離線區間詢問幾乎是無敵的。

恩,幾乎只要能離線,用分塊的莫隊演算法都能取得乙個令人滿意的的解法。

所以就有很多擴充套件(解決線段樹等資料結構由於需要區間加和性而不能解決的問題),如區間眾數,平均數什麼的。

恩。棒!

模板 莫隊演算法

題意 給定乙個大小為n的陣列,陣列中所有元素的大小 n。你需要回答m個查詢。每個查詢的形式是l,r,k。你需要回答在範圍 l,r 中至少重複k次的數字的個數。n,m 100000 誒,這題卡了好久,tle,中間棄了一段,然後今天學弟學莫隊,拿出這個題,他也沒什麼想法,然後我頓時退一步海闊天空了。最開...

莫隊演算法模板

一道簡單的莫隊演算法題 莫隊的一般寫法 codeforces 86d include define pb push back define mp make pair using namespace std const int maxn 2e5 7 typedef long long ll struc...

莫隊演算法 普通莫隊 智慧型暴力例題模板

1 基礎莫隊演算法2.莫隊演算法實現 莫隊演算法把排序做了簡單的修改,就把暴力法的複雜度從o mn 提高到o n n 1 暴力法的排序 把查詢的區間按左端點排序,如果左端點相同,再按右端點排序。莫隊演算法的排序 把陣列分塊 分成 n塊 然後把查詢的區間按左端點所在塊的序號排序,如果左端點的塊相同,再...