洛谷 P1314 聰明的質監員(二分 字首和)

2021-10-01 13:08:18 字數 1145 閱讀 6612

有兩串數wn,vn ,現在有m個區間,同時指定乙個w,每個區間會造成cost等於:

最後需要求和y

現在讓我們求乙個w 使得|y-s|的值最小。

解題思路:

首先考慮使用二分列舉w,為什麼用二分呢?因為我們發現yi函式是關於w遞減的,滿足一種單調性。然後我們列舉使得y>=s的最大的w1,再二分列舉y<=s的最小的w2,最後答案要麼是w1,要麼是w2. 因為他們是極值點中的左右值。如下圖:

另外這裡還有乙個難點,就是怎麼o(m)計算上面的cost公式。這裡我們需要對兩個求和號的內容計算乙個字首和。這裡我們需要篩一下,把不符合w的點的vi置0,同時新建乙個陣列在對應位置打1,這樣子來計算字首和。

#include #define int long long 

using namespace std;

int n;

int m,s;

const int maxn=2e5+10;

vectorv(maxn);

vectorw(maxn);

vector> range(maxn);

int calc(int mid)

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

int tmpy=0;

for(int i=1;i<=m;i++)

// cerr<>n>>m>>s;

int maxw=-1;

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

for(int i=1;i<=m;i++)

int x=0;int y=maxw+1;

while(x+1=s)x=mid;

else y=mid;

}int lx=x;

x=0; y=maxw+1;

// cerr<

else y=mid;

}// interesting

int ly=y;

cout<

return 0;

}

洛谷P1314 聰明的質監員 二分

小t是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有這批礦產共有n n個礦石,從11到n n逐一編號,每個礦石都有自己的重量wiw i 以及價值viv i 檢驗礦產的流程是 給定mm 個區間 li ri li ri 選出乙個引數w w對於乙個區間 li ri li ri 計算礦石在這個區間...

洛谷P1314 聰明的質監員 二分答案

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

洛谷 P1314 聰明的質監員

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