bzoj5178: [Jsoi2011]棒棒糖(主席樹)
題目傳送門
。
解法:
主席樹求區間超過區間長度一半次數的數。
程式碼實現:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
struct node {int lc,rc,c;}t[1100000];int cnt,n;
int a[51000],rt[51000];
void Link(int &u,int l,int r,int p) {
if(u==0)u=++cnt;
t[u].c++;int mid=(l+r)/2;
if(l==r)return ;
if(p<=mid)Link(t[u].lc,l,mid,p);
else Link(t[u].rc,mid+1,r,p);
}
void Merge(int &u1,int u2) {
if(u1==0){u1=u2;return ;}
if(u2==0)return ;
t[u1].c+=t[u2].c;
Merge(t[u1].lc,t[u2].lc);Merge(t[u1].rc,t[u2].rc);
}
int find(int u1,int u2,int l,int r,int x,int y) {
int c=(y-x+1)/2;
if(l==r) {
if(t[u2].c-t[u1].c>c) return l;
else return 0;
}
int c1=t[t[u2].lc].c-t[t[u1].lc].c,c2=t[t[u2].rc].c-t[t[u1].rc].c;
if(c1<=c&&c2<=c) return 0;int mid=(l+r)/2;
if(c1>c) return find(t[u1].lc,t[u2].lc,l,mid,x,y);
else return find(t[u1].rc,t[u2].rc,mid+1,r,x,y);
}
int main() {
int m;scanf("%d%d",&n,&m);cnt=0;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) {Link(rt[i],1,n,a[i]);Merge(rt[i],rt[i-1]);}
for(int i=1;i<=m;i++) {
int x,y,k;scanf("%d%d",&x,&y);
printf("%d\n",find(rt[x-1],rt[y],1,n,x,y));
}
return 0;
}
相關文章
- 主席樹
- 主席樹模板
- 動態主席樹模板
- 【資料結構】淺談主席樹資料結構
- SPOJ TTM To the moon(主席樹+區間操作)
- BZOJ4299: Codechef FRBSUM(主席樹)
- 演算法隨筆——主席樹(可持久化線段樹)演算法持久化
- bzoj3439: Kpm的MC密碼(主席樹+DFS序+字典樹)密碼
- 【主席樹】P3919 【模板】可持久化線段樹 1持久化
- SPOJ DQUERY (離線數狀陣列||線上主席樹)陣列
- 可持久化線段————主席樹(洛谷p3834)持久化
- 2024年3月21日 懸繩法 + 珂朵莉樹(ODT) + 主席樹
- bzoj4477: [Jsoi2015]字串樹(主席樹+Hash+Lca)JS字串
- Bzoj 1901 Zju2112 Dynamic Rankings(樹狀陣列+主席樹)陣列
- CF 220E Little Elephant and Inversions(主席樹+two points)
- 洛谷 P3919 可持久化線段樹 1 之主席樹模板(初級)持久化
- hdu 2665 可持久化線段樹求區間第K大值(函式式線段樹||主席樹)持久化函式
- bzoj4448: [Scoi2015]情報傳遞(主席樹+Lca)
- bzoj3110: [Zjoi2013]K大數查詢(主席樹+樹狀陣列)陣列
- bzoj2809: [Apio2012]dispatching(DFS序+主席樹)API
- bzoj5177: [Jsoi2013]貪心的導遊(主席樹)JS
- bzoj3932: [CQOI2015]任務查詢系統(主席樹)
- bzoj1146: [CTSC2008]網路管理Network(dfs序+主席樹+樹狀陣列)陣列
- bzoj2733: [HNOI2012]永無鄉(並查集+主席樹)並查集
- 【題解】Solution Set - NOIP2024集訓Day3 權值線段樹、動態開點、主席樹
- Android 5.0 名稱確定為Lollipop(棒棒糖)Android
- 毛主席軍事思想的智慧
- 向毛主席學習 ------日記
- ACL主席:ACL不是AI會議AI
- 3D印表機又一創意 列印情人臉棒棒糖3D
- 釋出十個月後 Android 棒棒糖份額終於突破 20%Android
- 棒棒糖之——Android中全套非同步處理的詳細講解Android非同步
- 陸奇加入拼多多,擔任技術委員會主席!
- CFTC主席:對區塊鏈的監管“落伍”了區塊鏈
- 歐盟消協主席:蘋果iTunes捆綁模式必須更改蘋果模式
- Google:資料顯示5.0版和5.1版的Android Lollipop(棒棒糖)表現不俗GoAndroid
- 瑞士證券交易所主席支援國家加密貨幣加密
- 樹套樹