P1314 聰明的質監員

2022-05-10 03:15:07 字數 1722 閱讀 1512

小t是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1 到 n 逐一編號,每個礦石都有自己的重量 \(w_i\)​ 以及價值 \(v_i\) 。檢驗礦產的流程是:

1 、給定 m 個區間 \([l_i,r_i]\) ;

2 、選出乙個引數 w ;

3 、對於乙個區間 \([l_i,r_i]\),計算礦石在這個區間上的檢驗值 \(y_i\)​ :

這批礦產的檢驗結果 yyy 為各個區間的檢驗值之和。即: \(y_1+y_2...+y_m\)

若這批礦產的檢驗結果與所給標準值 sss 相差太多,就需要再去檢驗另一批礦產。小t不想費時間去檢驗另一批礦產,所以他想通過調整引數w 的值,讓檢驗結果盡可能的靠近標準值 s ,即使得 \(s-y\) 的絕對值最小。請你幫忙求出這個最小值。

輸入格式:

第一行包含三個整數 n,m,sn,m,sn,m,s ,分別表示礦石的個數、區間的個數和標準值。

接下來的 nnn 行,每行 222 個整數,中間用空格隔開,第 i+1i+1i+1 行表示 iii 號礦石的重量 wiw_iwi​ 和價值 viv_ivi​ 。

接下來的 mmm 行,表示區間,每行 222 個整數,中間用空格隔開,第 i+n+1i+n+1i+n+1 行表示區間 [li,ri][l_i,r_i][li​,ri​] 的兩個端點 lil_ili​ 和 rir_iri​ 。注意:不同區間可能重合或相互重疊。

輸出格式:

乙個整數,表示所求的最小值。

輸入樣例#1:複製

5 3 15

1 52 5

3 54 5

5 51 5

2 43 3

輸出樣例#1:複製

【資料範圍】

對於 \(10\%\) 的資料,有 \(1 ≤n ,m≤10\) ;

對於 \(30\%\) 的資料,有 \(1 ≤n ,m≤500\) ;

對於 \(50\%\) 的資料,有 \(1 ≤n ,m≤5,000\) ;

對於 \(70\%\) 的資料,有 \(1 ≤n ,m≤10\) ;

對於 \(100\%\) 的資料,有 \(1 ≤n ,m≤200,000,0 < w_i,v_i≤10^6,0 < s≤10^,1 ≤l_i ≤r_i ≤n\) 。

二分答案 \(w\) 求出 \(y\) 和 \(s\) 比較,如果 \(y>s\) 把右端點左移至 \(mid-1\),如果 \(y把左端點右移至 \(mid+1\)

#include#include#include#include#includeusing namespace std;

int w[1000008],v[1000008],i,m,n,j,k,l[1000008],r[1000008],maxx;

long long d[1000008],t[1000008],ans=2147483647000000,s;

void add(int now,int k,long long *b)

long long ff(int now,long long *b)

long long dfs(int ww)

void ef(int ll,int rr)

}int main()

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,至大為所有物品中最大的重量,再大則與至大值意義相同 那麼每次用...