思路:離散化處理下就好了,具體解釋在**裡、
ps:小新新別看了,你學不會的
實現**:
#includeusingnamespace
std;
const
int m = 1e5 + 10
;int n,block,idx,a[m],bl[m],f[510][510
],val[m],cnt[m];
vector
ve[m];
void pre(int x)
}int query(int l,int r,int x)
int query(int l,int
r)
if(bl[l] !=bl[r])
}return
ans;
}map
mp;intmain()
a[i] = mp[a[i]]; //
離散化 ve[a[i]].push_back(i); //
將每個a[i]出現的下標存到a[i]對應的vecotr裡
}
for(int i = 1;i <= n;i ++) bl[i] = (i - 1)/block + 1
;
for(int i = 1;i <= bl[n];i ++) pre(i); //
預處理每乙個塊
for(int i = 1;i <= n;i ++)
return0;
}
loj 6285 數列分塊入門 9
題目 傳送門 簡要題意 給出乙個長為 n 的數列,以及 n 個操作,操作涉及詢問區間的最小眾數。題解 很開心,最後一題.分塊刷的非常高 惡 興 心 據說原題是一道超級大難題.還是先做做簡單的吧.首先用dp求出第i塊到第j塊的最小眾數.然後神奇的stl開始來襲.依舊分情況走一波.對於我們需要處理的其中...
LOJ6285 數列分塊入門9(分塊)
昨天對著 看了一晚上 然後今天終於在loj上過了 數列分塊入門9題撒花 然後相當玄學 塊的大小調成 sqrt 會tle,改成150就過了 嘖然後就是用map離散化之後的值不能直接比較大小 鍋鍋鍋 include include include include include include usin...
LOJ 6285 數列分塊入門 9 區間眾數
如果只查詢眾數的個數,完全可以莫隊,加數時容易維護眾數的數量,刪除數時,眾數的數量要麼減1,要麼不變,只需再開乙個標記陣列維護眾數的數量即可 根據陳立傑 區間眾數解題報告 實現了下面兩種解法 解法一 塊數分成sqrt n 超時了,150可以過 分塊真毒瘤 pragma gcc optimize 2 ...