分塊 LOUGU 作詩 正偶次分塊

2021-09-26 19:09:45 字數 1406 閱讀 3760

題解:題目就是讓求區間的正偶次個數,這裡可以仿照區間眾數的做法,整體下來進行分塊就比較複雜,還需要考慮銜接塊和大整塊,但是還是比較好思考的。

(重點看注釋)

// luogu-judger-enable-o2

//有是不挺的tle,,又是要卡常,,,開o2過的

#include

using namespace std;

inline

intread()

while

(ch<=

'9'&&ch>=

'0')s=s*

10+ch-

'0',ch=

getchar()

;return s*w;

}const

int sea=

1e5+7;

int n,m,mx,ans,top,num,block,belong[sea]

,cnt[

400]

[sea]

,f[400][

400]

,l[sea]

,a[sea]

,c[sea]

,st[sea]

;int

main()

belong[n+1]

=belong[n]+1

; l[belong[n+1]

]=n+1;

//建塊,跟之前的建塊有點不同,這裡主要是要每個塊的左端點

for(

int i=

1;i<=belong[n]

;i++)}

//記錄每個塊從l開始到n時的眾數出現的正偶次存在cnt中 ,f是記錄每一塊的初始答案

while

(m--

)//棧處理小區間的答案

printf

("%d\n"

,ans)

;continue;}

if(belong[y]

-belong[x]

>=

2) ans=f[belong[x]+1

][belong[y]-1

];//中間有整塊

for(

int i=x;i];i++

) c[a[i]]++

,st[

++top]

=a[i]

;for

(int i=l[belong[y]

];i<=y;i++

) c[a[i]]++

,st[

++top]

=a[i]

;//銜接塊

while

(top)

top--;}

printf

("%d\n"

,ans);}

return0;

}

BZOJ 2821 作詩 (分塊)

問題描述 神犇sjy虐完heoi之後給傻 lyd出了一題 shy是t國的公主,平時的一大愛好是作詩。由於時間緊迫,shy作完詩之後還要虐oi,於是shy找來一篇長度為n的文章,閱讀m次,每次只閱讀其中連續的一段 l,r 從這一段中選出一些漢字構成詩。因為shy喜歡對偶,所以shy規定最後選出的每個漢...

bzoj2821 作詩 Poetize 分塊

description 神犇sjy虐完heoi之後給傻 lyd出了一題 shy是t國的公主,平時的一大愛好是作詩。由於時間緊迫,shy作完詩 之後還要虐oi,於是shy找來一篇長度為n的文章,閱讀m次,每次只閱讀其中連續的一段 l,r 從這一段中選出一 些漢字構成詩。因為shy喜歡對偶,所以shy規...

BZOJ2821 作詩 Poetize 分塊

神犇sjy虐完heoi之後給傻 lyd出了一題 shy是t國的公主,平時的一大愛好是作詩。由於時間緊迫,shy作完詩之後還要虐oi,於是shy找來一篇長度為n的文章,閱讀m次,每次只閱讀其中連續的一段 l,r 從這一段中選出一些漢字構成詩。因為shy喜歡對偶,所以shy規定最後選出的每個漢字都必須在...