bzoj4241 歷史研究 分塊

2021-07-09 07:54:12 字數 528 閱讀 9988

popoqqq大神的題解:

分塊後,處理出mx[i][j]表示第i塊到第j塊的答案,cnt[i][j]表示前i塊數字j的個數,注意先離散化。

然後每次查詢,把塊外的部分單獨處理,塊內的部分直接寫答案就可以了。

#include#include#include#include#include#include#define maxn 100100

using namespace std;

struct yts1

a[maxn];

int b[maxn],bel[maxn];

int n,m,block,tot;

int l[400],r[400];

long long mx[400][400];

int cnt[400][maxn];

long long ans;

int num[maxn];

int st[maxn],top;

bool cmp(yts1 x,yts1 y)

{ return x.x

bzoj 4241 歷史研究 分塊

首先分成n 0.5塊,然後答案顯然是中間一整段的最大值,或者是兩端零星的部分。那麼可以得到f i j 表示第i塊到第j塊的答案 然後就需要快速求出零星部分出現的次數,用乙個字首和s i j 表示在前i塊中j出現的次數。離散化搞一搞。好像莫隊也是可以的把。ac 如下 include include i...

bzoj4241 歷史研究 分塊

傳送門 ioi國歷史研究的第一人 joi教授,最近獲得了乙份被認為是古代ioi國的住民寫下的日記。joi教授為了通過這份日記來研究古代ioi國的生活,開始著手調查日記中記載的事件。日記中記錄了連續n天發生的時間,大約每天發生一件。事件有種類之分。第i天 1 i n 發生的事件的種類用乙個整數xi表示...

bzoj4241 歷史研究 分塊

題目描述 ioi國歷史研究的第一人 joi教授,最近獲得了乙份被認為是古代ioi國的住民寫下的日記。joi教授為了通過這份日記來研究古代ioi國的生活,開始著手調查日記中記載的事件。日記中記錄了連續n天發生的時間,大約每天發生一件。事件有種類之分。第i天 1 i n 發生的事件的種類用乙個整數xi表...