Work 線段樹 二分答案

2021-08-26 05:55:39 字數 979 閱讀 3331

開始也想到二分,但是無法判斷哪些天數比它大,比它小

排序啊,人按浪費的時間排序,題按時間排序,下標加入線段樹

#include#define n 200005

#define ll long long

using namespace std;

int m,n,ans[n],mid,cnt[n*4];//時間總和 個數總和

ll tot[n*4];

struct node1t[n];

struct node2v[n];

bool cmp1(node1 x,node1 y)

bool cmp2(node2 x,node2 y)

int read()

void add(int root,int l,int r,int position,int w)

void quary(int root,int l,int r,int w,int cur)

int mid=(l+r)>>1;

if(tot[root<<1]-(ll)cnt[root<<1]*w>=cur)//根據cur的值來找到第幾天

quary(root<<1,l,mid,w,cur);

else quary(root<<1|1,mid+1,r,w,cur-(tot[root<<1]-(ll)cnt[root<<1]*w));}

int main()

if(tot[1]-(ll)(v[i].d*cnt[1])當前的人

else

}for(int i=1;i<=n;i++) cout<

return 0;

}

hdu 6070 二分答案 線段樹

題意 區間價值為 區間元素種類數 區間長度 問最小價值的區間是?思路 直接求解很困難,考慮二分答案判斷,注意這題的關鍵是將二分答案後的不等式進行變換,如官方題解。二分答案 mid,檢驗是否存在乙個區間滿足 size l,r r l 1 mid,也就是 size l,r mid l mid r 1 之...

CF460CPresent(二分答案 線段樹)題解

思路 顯然,這題正著不太好推,那麼就考慮二分答案,有乙個很大的問題,我們需要在 o n log n 或者 o n 的時間內判斷我們二分答案的可行性。首先肯定想到貪心,但是你會發現每乙個元素需要加的值不一樣,加了值以後影響的範圍也不一樣,並不好維護。因為涉及到區間修改,考慮使用線段樹。我們維護每一位置...

Sequence(線段樹 二分)

傳送門 第二次做這種題目,把人做傻了,沒想到是二分,只是隱隱約約感覺到了二分的影子。於是寫了兩個查詢的函式,但是發現查詢的函式無法解決求左邊最大值和右邊最小值的問題。寫了一大堆爛 正解只需要在查詢的時候不斷二分就行了。include using namespace std typedef long ...