有兩串數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 這批礦產的...