莫隊演算法 區間眾數出現次數

2021-10-06 07:17:19 字數 2140 閱讀 8172

2020.5.19

昨天學完莫隊之後重寫了一遍mcpc19的那一道區間眾數的,發現了幾個可以改進的點。乙個是離散化,港真我不知道原題是怎麼回事兒,上了離散化,後來無論是d-query還是路邊的蒲公英好像完全沒必要上離散化,畢竟是1e5個數字,開個陣列記錄下就行了,所以這部分刪掉,然後模擬一下我們查詢區間眾數出現次數的方法,首先考慮加入座標位置為x,數字為a[x],對於當前區間維護的答案的影響,首先要消除對於上一次a[x]出現的影響,那就是sum[cnt[a[x]]] -1, 然後將出現次數cnt[a[x]]加一,比較其與目前出現次數的的大小,然後將sum[cnt[a[x]]] 加一,就完成了一次維護,縮排的del函式同理,就是看sum[cnt[a[x]]] 是不是為0,如果cnt[a[x]]是目前最大次數,(因為sum[cnt[a[x]]] 是0所以是唯一最大次數),那麼就對答案進行-1,修正後的區間就是我們所需要的答案。

**如下:

#include

using

namespace std;

#define limit (10000 + 5)

//防止溢位

#define inf 0x3f3f3f3f

#define inf 0x3f3f3f3f3f

#define lowbit(i) i&(-i)

//一步兩步

#define eps 1e-6

#define fastio ios::sync_with_stdio(false);cin.tie(0);

#define ff(a) printf("%lld\n",a );

#define pi(a,b) pair

#define rep(i, a, b) for(int i = a ; i <= b ; ++i)

#define per(i, a, b) for(int i = b ; i >= a ; --i)

#define mint(a,b,c) min(min(a,b), c)

#define mod 998244353

#define fopen freopen("c:\\users\\administrator01\\clionprojects\\untitled24\\data.txt", "rt", stdin)

typedef

long

long ll;

typedef

unsigned

long

long ull;

ll read()

while

(s >=

'0'&& s <=

'9')

return x * sign;

}//快讀

void

write

(ll x)

int n, m;

struct node

bool

operator

<

(const node &rhs)

const

}query[limit]

;int cnt[limit]

,a[limit]

,sum[limit]

;int res;

void

add(

int x)

void

del(

int x)

map<

double

,int

>mp;

int tot, vis[limit]

;int

main()

else

}int block =

int(

sqrt

(n >=

3? n *

(2.0/3

): n));

//分塊

rep(i,

1, m)

sort

(query +

1, query +

1+ m)

;int l =

0, r =0;

res =0;

rep(i ,

1, m)

rep(i ,

1, m)

return0;

}

傳智杯 眾數出現的次數

題目 2315 傳智杯 眾數出現的次數 時間限制 5sec 記憶體限制 512mb 提交 318 解決 120 題目描述 傳智專修學員的課堂上,為了活躍氣氛,並鞏固位運算的知識,同學們玩起了乙個遊戲。班級裡有 n n 10 6 名同學,每位同學都獲得了兩張卡,紅卡或者黑卡。每張卡上都有乙個不超過 1...

P6365 眾數出現的次數(水)

思路 利用map,將每個同學的第乙個數字和兩個數字的異或值標記加一。但是有乙個地方需要注意一下,就是如果x x y 的話,就只加1一次就可以了,因為這個同學只能出一次牌。如下 include define ll long long define inf 0x3f3f3f3f using namesp...

詢問區間內出現次數最多的數出現的次數

poj 3368 frequent values rmq 題意 給出乙個非降序排列的整數陣列a1,a2,an,你的任務是對於一系列詢問 i,j 回答ai,ai 1,aj中出現最多次數的值所出現的次數?分析 劉汝佳 訓練指南p198 1.本題主要思想是把輸入序列分成一段段由相同值構成的序列,然後對於每...