首先分成n^0.5塊,然後答案顯然是中間一整段的最大值,或者是兩端零星的部分。
那麼可以得到f[i][j]表示第i塊到第j塊的答案;然後就需要快速求出零星部分出現的次數,用乙個字首和s[i][j]表示在前i塊中j出現的次數。
離散化搞一搞。
好像莫隊也是可以的把。
ac**如下:
#include#include#include#include#include#define ll long long
#define n 100005
#define m 335
using namespace std;
int n,m,cnt,c[n],num[n],g[n],s[m][n],l[m],r[m],blg[n];
ll f[m][m]; struct nodea[n];
int read()
return x;
}bool cmp(node u,node v) else
for (i=x; i<=y; i++) g[c[i]]=0;
} printf("%lld\n",ans);
} return 0;
}
by lych
2016.3.25
bzoj4241 歷史研究 分塊
popoqqq大神的題解 分塊後,處理出mx i j 表示第i塊到第j塊的答案,cnt i j 表示前i塊數字j的個數,注意先離散化。然後每次查詢,把塊外的部分單獨處理,塊內的部分直接寫答案就可以了。include include include include include include de...
bzoj4241 歷史研究 分塊
傳送門 ioi國歷史研究的第一人 joi教授,最近獲得了乙份被認為是古代ioi國的住民寫下的日記。joi教授為了通過這份日記來研究古代ioi國的生活,開始著手調查日記中記載的事件。日記中記錄了連續n天發生的時間,大約每天發生一件。事件有種類之分。第i天 1 i n 發生的事件的種類用乙個整數xi表示...
bzoj4241 歷史研究 分塊
題目描述 ioi國歷史研究的第一人 joi教授,最近獲得了乙份被認為是古代ioi國的住民寫下的日記。joi教授為了通過這份日記來研究古代ioi國的生活,開始著手調查日記中記載的事件。日記中記錄了連續n天發生的時間,大約每天發生一件。事件有種類之分。第i天 1 i n 發生的事件的種類用乙個整數xi表...