查詢區間【l,r】中有多少數 比給定的 h 小。
我們可以這麼想, h 一定會比 區間的第 x 大 ,第 x +1 小。
怎麼確定 x。
這是乙個單調的問題, 所以二分 + 區間第 k 大就可以確定了。
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 100000 + 131;
int sorted[maxn];
int tree[30][maxn];
int toleft[30][maxn];
void build(int l, int r, int dep)
build(l,mid,dep+1), build(mid+1, r, dep+1);
}int query(int l, int r, int l, int r, int dep, int k)
else
}int main()
else r = mid - 1;
}printf("%d\n",ans);}}
return
0;}
hdu 5875(ST 二分區間)
題意 給乙個序列,有n個數字和m次詢問。每次詢問給乙個區間,問這個區間從l開始一直對l後面的陣列取模,一直到r。分析 乙個較小的數字對乙個較大的數字取模,值不發生改變。所以每次只要找最近的比自己小的數字取模更新答案即可。用rmq維護區間最小值。每次查詢乙個區間就在這個區間內進行二分。如果左區間有比l...
整體二分 區間第 K 小(大)問題 詳解
整體二分是乙個求解區間第k小 大 非常優秀的演算法,但是要求離線處理,對於所有詢問做整體的二分答案操作。相較於主席樹 樹套樹,整體二分 應該 更加優秀。我用主席樹與整體二分寫,並沒有發現在時間上整體二分快多少,我自己算時間複雜度也覺得兩者差不多 也可能我寫的太醜了 但是空間上整體二分當然非常佔優 上...
HDU 4768 (二分區間 漲姿勢)
題意 告訴n組a,b,c,按照a k c生成等差數列,問這n組數列中哪個數字出現了奇數次以及出現了幾次,題目保證最多隻會出現乙個這種數字。分析 讀完題並沒有思路,後來知道是二分區間,列舉是哪個數字出現了奇數次,算該數字之前一共有幾個數字,如果是奇數個,說明答案就在 l mid 中。ps 之前用二分只...