洛谷P4168 Violet 蒲公英 分塊

2021-09-14 03:14:20 字數 2207 閱讀 5640

時空限制 2000ms / 512mb

題目描述

在鄉下的小路旁種著許多蒲公英,而我們的問題正是與這些蒲公英有關。

為了簡化起見,我們把所有的蒲公英看成乙個長度為n的序列 (a_1,a_2…a_n),其中ai為乙個正整數,表示第i棵蒲公英的種類編號。

而每次詢問乙個區間 [l,r],你需要回答區間裡出現次數最多的是哪種蒲公英,如果有若干種蒲公英出現次數相同,則輸出種類編號最小的那個。

輸入格式:

第一行兩個整數 n,m ,表示有n株蒲公英,m 次詢問。

接下來一行n個空格分隔的整數 ai,表示蒲公英的種類

再接下來m 行每行兩個整數l0,r0 ,我們令上次詢問的結果為 x(如果這是第一次詢問, 則 x=0)。

令l =(

l0+x

−1)m

odn+

1,r=

(r0+

x−1)

modn

+1

l=(l_0+x-1) \bmod n + 1,r=(r_0+x-1) \bmod n + 1

l=(l0​

+x−1

)mod

n+1,

r=(r

0​+x

−1)m

odn+

1,如果 l>r,則交換 l,r 。

最終的詢問區間為[l,r]。

輸出格式:

輸出m 行。每行乙個整數,表示每次詢問的結果。

說明對於 100% 的資料,保證 1≤n

≤40000,1

≤m

≤50000,1

≤ai≤

10

91\le n \le 40000,1\le m \le 50000,1\le a_i \le 10^9

1≤n≤40

000,

1≤m≤

5000

0,1≤

ai​≤

109題目分析

套路分塊,黑題評分十分鬼畜

s um

[i][

x]

sum[i][x]

sum[i]

[x]記錄從第i塊到序列末尾每個數出現次數,mx[i][j]記錄塊i到塊j的區間眾數

乙個[l,r]的詢問,假如其中整塊的區間為[l,r]

那麼眾數要麼出現在[l,r]中,要麼出現在[l,l)或(r,r]中

遍歷這兩部分不是整塊的部分,記錄每個數出現次數,結合sum陣列更新即可

注意數值離散化,出現次數相同更新編號小的

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long lt;

intread()

while

(ss>=

'0'&&ss<=

'9')

return f*x;

}const

int maxn=

50010

;int n,m,t;

int a[maxn]

,b[maxn]

,pos[maxn]

,cnt;

int lft[

310]

,rht[

310]

,bl[maxn]

;int sum[

310]

[maxn]

,mx[

310]

[310];

int rem[maxn]

,ans;

void

build()

}}void

cls(

int ll,

int rr)

intsolve

(int ll,

int rr)

cls(ll,rr);}

else

for(

int i=lft[q]

;i<=rr;

++i)

cls(ll,rht[p]);

cls(lft[q]

,rr);}

return res;

}int

main()

return0;

}

洛谷 P4168 Violet 蒲公英 解題報告

親愛的哥哥 你在那個城市裡面過得好嗎?我在家裡面最近很開心呢。昨天晚上奶奶給我講了那個叫 絕望 的大壞蛋的故事的說!它把人們的房子和田地搞壞,還有好多小朋友也被它殺掉了。我覺得把那麼可怕的怪物召喚出來的那個壞蛋也很壞呢。不過奶奶說他是很難受的時候才做出這樣的事的 最近村子里長出了一大片一大片的蒲公英...

P4168 Violet 蒲公英 分塊

題目鏈結 分塊。p i j 表示第 i 個塊到第 j 個塊內的眾數,預處理出來就好了,列舉 i 和 j 是 o sqrt n 的,列舉 j 塊內的數也是 o sqrt n 的,總複雜度 o n sqrt n sum i h 表示前 i 個塊數字 h 出現的個數,預處理是 o n 的。對於每乙個查詢,...

洛谷P4168 蒲公英 分塊

給出乙個長度為n n的序列,m m次詢問,求區間 l,r l r 以下內容參考lyd lyd 演算法競賽高階指南 先離散化不解釋。分塊演算法一般都是以 暴力 區間預處理 暴力 的方法做的。所以,我們把n n分成t t塊,每塊長度 tn nt 然後預處理出對於任意兩個區間內的數字個數。也就是說,對於任...