神犇sjy虐完heoi之後給傻×lyd出了一題:shy是t國的公主,平時的一大愛好是作詩。由於時間緊迫,shy作完詩
些漢字構成詩。因為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
不得不吐槽這個題目太囉嗦了····給最後一句話就可以了·····
和之前演算法複習裡的例題幾乎是一樣的,預處理cnt[i][j]表示數i在前j個塊中的數量,ans[i][j]為第i個塊到第j個塊的答案·····然後就是分塊的套路了···詳細見**···
#include#include#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int n=1e5+5
;const
int m=320
;int
tots,s,sum[n][m],ans[m][m],n,c,m,num[n],id[n],left[m],right[m],tot[n],tim,visit[n];
bool
jud[n];
inline
intr()
inline
void
pre()
right[tots]=n,jud[n]=true;
for(int i=1;i<=n;i++)
sum[num[i]][id[i]]++;
for(int i=2;i<=tots;i++)
for(int j=1;j<=c;j++)
sum[j][i]+=sum[j][i-1
];
tim=0;
for(int i=1;i<=tots;i++)
}memset(visit,
0,sizeof
(visit));
}inline
int getans(int a,int
b)
return
cn; }
else
for(int i=right[rights]+1;i<=b;i++)
return
cn; }
}int
main()
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規定最後選出的每個漢字都必須在...