luogu P1314 聰明的質監員

2022-03-09 21:48:34 字數 1341 閱讀 9851

題目描述

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

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

2、選出乙個引數w;

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

yi=(sumv[ri]-sumv[li-1])*(sum[ri]-sum[li-1]) 且wj≥w,j是礦石編號

這批礦產的檢驗結果y為各個區間的檢驗值之和。即:y=\sum_^}

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

輸入描述:

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

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

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

輸出描述:

輸出只有一行,包含乙個整數,表示所求的最小值。

備註:對於 10%的資料,有 1 ≤ n,m ≤ 10;

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

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

對於 70%的資料,有 1 ≤ n,m ≤ 10,000;

對於 100%的資料,有 1 ≤ n,m ≤ 200,000,0 < wi, vi ≤ 106,0 < s ≤ 1012,1 ≤ li ≤ ri ≤ n

二分w,字首和判斷

#include#include#include#includeusing namespace std;

const int n=2e5+10,m=2*n;

#define int long long

int n,m,s,w[n],v[n];

struct nodee[n];

int sumv[n],sum[n],op;

inline bool check(int mid)else

op=0;

for(int i=1;i<=m;i++)op+=(sumv[e[i].r]-sumv[e[i].l-1])*(sum[e[i].r]-sum[e[i].l-1]);

if(op<=s)return 1;

else return 0;

}signed main()else

} cout<}

luogu P1314 聰明的質監員

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

luogu P1314 聰明的質監員 x

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

洛谷1314 聰明的質監員

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