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