BZOJ2821 作詩 Poetize 分塊

2022-05-27 15:51:12 字數 2516 閱讀 5107

神犇sjy虐完heoi之後給傻×lyd出了一題:

shy是t國的公主,平時的一大愛好是作詩。

由於時間緊迫,shy作完詩之後還要虐oi,於是shy找來一篇長度為n的文章,閱讀m次,每次只閱讀其中連續的一段[l,r],從這一段中選出一些漢字構成詩。因為shy喜歡對偶,所以shy規定最後選出的每個漢字都必須在[l,r]裡出現了正偶數次。而且shy認為選出的漢字的種類數(兩個一樣的漢字稱為同一種)越多越好(為了拿到更多的素材!)。於是shy請lyd安排選法。

lyd這種傻×當然不會了,於是向你請教……

問題簡述:n個數,m組詢問,每次問[l,r]中有多少個數出現正偶數次。

輸入第一行三個整數n、c以及m。表示文章字數、漢字的種類數、要選擇m次。

第二行有n個整數,每個數ai在[1, c]間,代表乙個編碼為ai的漢字。

接下來m行每行兩個整數l和r,設上乙個詢問的答案為ans(第乙個詢問時ans=0),令l=(l+ans)mod n+1, r=(r+ans)mod n+1,若l>r,交換l和r,則本次詢問為[l,r]。

輸出共m行,每行乙個整數,第i個數表示shy第i次能選出的漢字的最多種類數。

5 3 5

1 2 2 3 1

0 41 2

2 22 3

3 5200

01對於100%的資料,1<=n,c,m<=10^5

by lydrainbowcat

還沒ac就寫題解2333,原因是因為入bz坑以來第二次遇到卡評測的事辣,雖然沒法評測,遇到這種事莫名感興趣xd。

1.f[i][j]:第i塊到第j塊中合法的個數。

2.字首和[i][j]:前i個漢字中j出現的個數,當然並不是用2維陣列的來實現的,而是在結構體中以漢字為第一關鍵字,以所在序號為第二關鍵字排序,用的時候二分即可。

這樣,題目變得很明了了,查詢時,對於同塊或相鄰塊內的查詢,直接暴力二分統計即可,若不在同乙個塊內,則開始直接ans=f[pos[l]+1][pos[r]-1](pos為所在塊),也就是吧l,r之間的完整的塊直接用f,剩下的暴力二分,注意細節。

但是!!!跟著黃學長寫,分成sqrt(n)塊的我t了,要分成sqrt(n/logn)塊,不知道**寫殘了,一定要寫個分成sqrt(n)的版本出來。

1 #include 2 #include 3 #include 4 #include 5 #include 6

#define n 100010

7#define sn 1555

8#define inf 0x7fffffff

9using

namespace

std;

10struct datab[n];

11int

f[sn][sn],first[n],last[n],flag[n],temp[n],a[n],pos[n],l[sn],r[sn];

12int

n,m,block,cnt,c;

13bool cmp(data a,data b)

14 inline int

read()

1523

void

part1_pre()

2437}38

for (int i=1;i<=n;i++)

3943 sort(b+1,b+n+1

,cmp);

44for (int i=1;i<=n;i++)

4549}50

int findup(int x,int

v)5158}

59return

tem;60}

61int finddown(int x,int

v)6269}

70return

tem;71}

72int find(int x,int y,int v)

73int query(int x,int

y)7484}

85}86for (int i=x;i<=y;i++) flag[a[i]]=0;87

}88else

89100

else

101if (!(t1&1) && t1) ans--;

102}

103}

104for (int i=r+1;i<=y;i++)

105112

else

113if (!(t1&1) && t1) ans--;

114}

115}

116for (int i=x;i0

;117

for (int i=r+1;i<=y;i++) flag[a[i]]=0

;118

}119

return

ans;

120}

121int

main()

122143

return0;

144 }

sqrt(n/logn)版本

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規定最後選出的每個漢字都必須在...