洛谷 1314 聰明的質監員

2021-09-24 14:31:35 字數 1480 閱讀 5600

題目描述

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

1 、給定m個區間[li,ri];

2 、選出乙個引數w;

3 、對於乙個區間[li,ri],計算礦石在這個區間上的檢驗值yi:

這批礦產的檢驗結果y 為各個區間的檢驗值之和。即:y1+y2…+ym

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

輸入輸出格式

輸入格式:

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

接下來的n行,每行2個整數,中間用空格隔開,第i+1行表示iii號礦石的重量wi和價值vi。

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

輸出格式:

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

輸入輸出樣例

輸入樣例#1:

5 3 15

1 52 5

3 54 5

5 51 5

2 43 3

輸出樣例#1:

10

說明

【輸入輸出樣例說明】

對於100%的資料,有1≤n,m≤200,000,06,012,1≤li≤ri≤n

解釋:觀察發現其最終結果與w有單調性,這樣就類似求單調區間內的0點就好了。直接二分答案,這裡注意l<=r,浪費我很多時間。。

#include#include#define n 200005

using namespace std;

long long n=0,m=0,s=0;

long long inf=0x3f3f3f3f3f3f3f3f;

struct nodea[n];

int l[n]=,r[n]=;

long long sum[2][n]=;

long long ret=inf;

long long abs1(long long x)

long long ok(long long w)

sum[0][i]+=sum[0][i-1];

sum[1][i]+=sum[1][i-1];

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

return temp;

}int main()else

}cout

}

洛谷1314 聰明的質監員

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

洛谷1314 聰明的質監員

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

洛谷 P1314 聰明的質監員

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