4241 歷史研究

2021-08-03 16:35:44 字數 1292 閱讀 5649

這一題我還是不會做qaq

一開始想了一想,好像可以上莫隊

嗯,怎麼維護修改呢

我們可以對數值進行分塊啊,那麼每次就只需要n√

的時間就可以維護好了

(⊙v⊙)嗯,看起來是乙個十分優越的做法

時間複雜度就是莫隊*n√

,也就是n√

∗nn√

,大概是n2

這就跟暴力沒什麼區別嘛,就名字好聽了一點

於是繼續想。。

什麼都沒想出來。。

於是。。。

看了兩眼,又會了

大概就是維護 前i個塊數字為j出現了多少次以及第i個塊到第j個塊的答案

如果你是零碎的地方,你就暴力算

零碎的答案是n√

的 至於為什麼是對的。。我覺得這個很好理解就懶得寫了

感覺看**應該很快能看懂

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const ll n=100005;

ll n,q;

struct qq

s[n];

ll b[n];//離散後的這個值在原值裡面是多少

ll a[n];//離散後的序列

bool cmp (qq a,qq b)

}cnt=belong[n];

r[cnt]=n;

return ;

}ll cnt1;

void init ()

sort(s+1,s+1+n,cmp);

cnt1=1;a[s[1].id]=1;b[1]=s[1].x;

for (ll u=2;u<=n;u++)

}ll lalal[350][n];//前i個塊數字為j出現了多少次

ll ans[350][350];//第i個塊到第j個塊的答案

ll ooo[n];//某個數字出現了多少次

ll mymax (ll x,ll y)

void ready ()

}}void solve ()

else

for (ll u=l[belong[r]];u<=r;u++)

printf("%lld\n",ans);}}

}int main()

不知道為什麼,居然跑了80s,這已經不是暴力了好不好qaq

bzoj4241 歷史研究

這題也是坑了好久 之前whx帶我刷joi的時候本來應該要做的。可是太懶沒有寫。區間詢問加權眾數。分塊,預處理出塊和塊之間的答案,記錄到第i個塊數字x出現了多少次。然後查詢的時候和普通眾數基本一樣,就是乘了個權值而已。要離散化。時間複雜度o nlogn mn 昨晚寫的常數太爛了。用了struct,陣列...

BZOJ4241 歷史研究

一眼覺得是莫隊,發現刪除不是很好搞,於是上回滾莫隊直接搞過 回滾莫隊用於處理難以刪除但是易於新增 其實易於刪除難以新增也可以,但是沒見過這樣題 的莫隊,排序照常,如果左右端點在同一塊直接暴力,這部分最多n sqrt n,否則把左端點在一塊的一起處理,清空莫隊,然後直接令莫隊左端點在塊尾,這部分n s...

bzoj4241 歷史研究

題目鏈結 看到題目就聯想到了 bzoj2809 apio2012 dispatching。想了想權值分塊 莫隊,發現不好維護塊內最值,又看了看80s的時間,於是怒水一發線段樹 莫隊,結果先wa後tle,不斷tle,無論怎麼改常數都不行,難道nlogn sqrt n 就是過不了嗎!不爽,蒯個題解,再見...