大爺的字串題 莫隊

2021-09-28 15:29:25 字數 1237 閱讀 3003

題目描述見鏈結 .

題意: 求區間內出現最多的數字出現的次數 .

使用莫隊, 記 ton

g[x]

tong[x]

tong[x

] 表示 x

xx 出現了幾次, 再記 num

[x

]num[x]

num[x]

表示出現 x

xx 次的數字有多少個,

m ax

_num

max\_num

max_nu

m 表示答案,

放上很久以前寫的** …

#include

#include

#include

#include

#define _for(x, n, p) for(int i = x; i <= n; i += p)

const

int maxn =

200005

;int n, m, ans;

int tong[maxn]

, num[maxn]

, a[maxn]

, b[maxn]

;int max_num, max_index;

struct query q[maxn]

;bool

cmp(

const query &a,

const query &b)

bool

_cmp

(const query &a,

const query &b)

void

add(

int x)

void

del(

int x)

intmain()

std::

sort

(q+1

, q+m+

1, cmp)

;int l =

1, r =0;

_for(1

, m,1)

std::

sort

(q+1

, q+m+

1, _cmp)

;_for(1

, m,1)

printf

("-%d\n"

, q[i]

.ans)

;return0;

}

P3709 大爺的字串題 腦子 莫隊

簡化題意 區間眾數出現次數?為什麼?原因是,貪心的想,我們要劃分成盡量少的嚴格遞增序列,這樣rp掉的最少。設區間眾數出現次數為 x 那我們至少要分成 x 段嚴格上公升序列。include include include include include define r register int us...

P3709 大爺的字串題 莫隊 結論

p3709 大爺的字串題 有乙個顯然的結論 一段區間裡最小答案為眾數的個數 用莫隊來離線求眾數 tmp i 表示出現 i 次的數的個數,num i 表示 i 出現的次數 縮小區間 答案可能減小,看答案所在的 tmp 是否不唯一 擴大區間 答案增大 includetypedef int ll cons...

洛谷3709 大爺的字串題(離散化 莫隊)

點此看題面 大致題意 演算法標籤 語文,給定乙個數列,多組詢問,每次詢問乙個區間內的眾數出現的次數。這道題的演算法應該是莫隊。我們可以用 cnt 陣列記錄下每個數出現的次數 注意要先離散化 用 tot 陣列記錄下每個數在 cnt 陣列中的出現次數,並用 ans 記錄答案。當我們要加入乙個新數 x 的...