題目描述見鏈結 .
題意: 求區間內出現最多的數字出現的次數 .
使用莫隊, 記 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 的...