題意:
給出乙個長度為n的序列,每次詢問乙個區間[l,r];
查詢在這個區間中取出兩個數恰好相等的概率;
每個數大小在[0,n]內,概率用既約分數表示;
題解:
考慮乙個區間的答案,顯然是合法方案數/取數的所有可能;
也就是 ∑c[同種數字個數][2]/c[r-l+1][2];
但是這個東西對一次詢問的處理複雜度是o(r-l+1)的;
那麼考慮上莫隊演算法,處理這樣的區間問題;
很容易發現每次修改邊界可以做到o(1)完成;
void update(int x,int op)
c[i][j]是組合數,s[x]是當前區間x的數量,now是當前答案;
然後將詢問排序處理,第一關鍵字左端點所在塊,第二關鍵字右端點;
當塊的大小為√n時,可以證明複雜度不會超過o(n√n);
然後每個區間轉移到下乙個區間就是有複雜度保證的暴力咯;
碼量似乎不算太巨大,思想也比較簡單,很神的暴力演算法;
**:
#include#include#include#include#define n 51000
using namespace std;
struct query
q[n];
int a[n],s[n],ans_up[n],ans_do[n],c[n][3],now;
bool cmp(query a,query b)
for(i=1;i<=m;i++)
return 0;
}
BZOJ2038 小Z的襪子 莫隊
bzoj2038 題意 q 5000 次詢問,問在區間中隨意取兩個值,這兩個值恰好相同的概率是多少?分數表示 感覺自己複述的題意極度抽象,還是原題意有趣 逃 思路 設在l到r這個區間中,x這個值得個數為a個,y這個值的個數為b個,z這個值的個數為c個。那麼答案即為 a a 1 2 b b 1 2 c...
BZOJ 2038 小Z的襪子(莫隊演算法)
莫隊演算法的話,看這個比較好懂 net bossup article details 39236275 不過這裡面的部落格的 貌似有點問題,所以 的話,net lwt36 article details 50583757 這個是對的,看我的也行。什麼時候用莫隊?1 區間不會被修改 2 可以離線 3 ...
BZOJ2038,小Z的襪子(莫隊演算法)
莫隊演算法。這道題wa了很多次,猜測可能是跟oj系統有關,有點坑。如下 include include include includeusing namespace std typedef long long ll const int maxn 5e4 5 const int mm 2e6 5 in...