P1314 聰明的質監員

2022-04-07 21:41:20 字數 881 閱讀 1401

p1314 聰明的質監員

這題還是挺有名的,然而是個假題……原因

但是它的思維方式還是挺重要的。

思路:我們發現乙個w可以唯一確定乙個y,但是w不知道。像這種情況很容易想到二分。二分可以在 \(o(\log n)\) 的時間內多個條件,有時候可以先假裝二分過了去想題,發現不用二分再把二分去掉。

但是再算一算,只加上二分這乙個優化並不能通過極限資料(std只是在時間上過了,資料的儲存並沒過,這就是這題假的原因)。發現這題的瓶頸在於對於區間 \([l_i,r_i]\) 我們暴力統計就已經達到 \(o(n*m)\) 的複雜度,做一次就已經ac不了了,考慮對這一步進行優化。弄2個字首和陣列,\(sum1_i\) 表示區間 [1,i]內有幾個 \(w_i\) 比 x 大(x就是二分的那個值),\(sum2_i\) 表示區間[1,i]內 \(w_i\) 比 x 大的數的 \(v_i\) 的總和,於是 \(o(n)\) 預處理字首陣列, \(o(m)\) 統計即可。時間總複雜度 \(o((n+m)\log d)\) (\(d=max\)).

code

#includeusing namespace std;

#define int long long

const int n=200005;

const int inf=1e15;

int n,m,s,w[n],v[n],ll=inf,rr=0,ans=inf,l[n],r[n],sum1[n],sum2[n],tmp;

int min(int x,int y)

bool pd(int x)

signed main()

printf("%lld\n",ans);

return 0;

}

P1314 聰明的質監員

小t 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1到n 逐一編號,每個礦石都有自己的重量 wi 以及價值vi 檢驗礦產的流程是 1 給定m 個區間 li,ri 2 選出乙個引數 w 3 對於乙個區間 li,ri 計算礦石在這個區間上的檢驗值yi 這批礦產的檢驗結果y...

P1314 聰明的質監員

原題連線 首先題號好評qwq 1314 意思就是 我們要在第 i 個區間 li ri 裡找到所有的 j,使得 wj w,求出這些 j 的價值總和及符合條件的 j 的個數,那麼這個區間的貢獻就是這個價值總和乘上 j 的個數,然後我們要算所有區間的貢獻的總和 y 最後輸出 y s 的絕對值的最小值,其中...

P1314 聰明的質監員

我是題面 讀完題後,我們會發現這道題的題意非常簡單,大意就是有n件物品,m個區間,求每個區間檢驗值之和,通過改變引數使標準值與檢驗值的差的絕對值最小 很明顯,檢驗值的變動只與引數有關,我們可以二分引數來搜尋答案 由題意可知,引數至小為0,至大為所有物品中最大的重量,再大則與至大值意義相同 那麼每次用...