莫隊模板 模板題

2021-08-15 12:29:47 字數 1133 閱讀 8330

也不說了直接上板子

#include

using namespace std;

struct quesq[200010];//結構體存每個詢問,注意要記錄詢問順序以便輸出

const int block=1300;//分的塊大小

int a[30010],ans[200010],res=0;//a陣列資料,ans存各個詢問答案,res當前左右端點答案

void add(int

pos)//加入新點

void del(int

pos)//刪除點

bool cmp(ques a,ques b)//排序比較函式

while(nowl>q[i].l)//往左,類似

while(nowr>q[i].r)//當前大於詢問右端點,往左刪除

while(nowl

ans[q[i].id]=res;//存下該次詢問答案

}//輸出,略

}//這裡需要注意的是4個while迴圈一般先搞新增再搞刪除,以免l到r右邊產生奇怪錯誤

題意:給乙個串,裡面一堆整數,再給出一堆詢問,問給定區間不相同數的個數.

資料範圍(串中數數量<=30000,每個數大小<=1000000,詢問數<=200000)

裸題,莫隊板子貼上去就行,複雜度詢問數*根號(數的數量)

#include

using namespace std;

struct quesq[200010];

const int block=1300;int a[30010],belong[30010],ans[200010],res=0;int vis[1000010]=;

void add(int

pos)

void del(int

pos)

bool cmp(ques a,ques b)

while(nowl>q[i].l)

while(nowr>q[i].r)

while(nowl

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

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

printf("%d\n",ans[i]);

}

模板 莫隊演算法

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

模板 莫隊演算法

這個演算法是由之前的國家隊隊長莫濤巨神 orz 發明的,所以尊稱莫隊演算法。如果我們知道區間 l,r 就能在o 1 求出 l 1,r l 1,r l,r 1 l,r 1 的話,那就可以用莫隊演算法了。1 排序,以左段點所在的塊為第一關鍵字,以右端點為第二關鍵字 2 從左往右處理詢問 離線 3 不斷調...

莫隊演算法模板

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