NOIP 2011 聰明的質檢員 二分答案

2022-04-28 20:18:10 字數 1127 閱讀 7962

先解釋一下這個式子:

就是說如果區間[li, ri] 中 wj>=w的個數 乘以 所有的wj>=w的價值的和。

那麼我們可以二分w的值,通過y與s的值來調整w,

具體來講,只要當下的y大於s,那麼增加mid(增大mid質量),否則減小mid。

至於check,我們可以o(n)的預處理字首和 and 字首積。總複雜度 o(nlogn)。

**可能有些傻,好像是debug的時候一頓亂改搞的。。。

#include #define ll long long

using

namespace

std;

inline

intgi ()

while (ch>='

0' && ch<='9'

)

return w?-x:x;

}const

int size=300010

;int n,m,l=2147483647

,r,mid,prenum[size];

ll s,prej[size],ans,minx=999999999999999;

struct

stone s[size];

struct

area a[size];

intmain ()

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

l--; r++;

while (l

else

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

ans+= (prenum[a[i].r]-prenum[a[i].l-1]) * (prej[a[i].r]-prej[a[i].l-1

]);

if (ans>s) l=mid+1

;

else r=mid;

minx=min (minx, llabs (ans-s) );

} printf (

"%lld\n

", minx);

return0;

}

noip2011 聰明的質檢員

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

NOIP2011 聰明的質檢員

題目傳送門 你有n nn個零件,給你m mm個區間,其中 y i i l iri a i w w i liri a i w w a i vy i sum a i w w sum a i w w a i v yi i li ri a i w w i l i r i a i w w a i v然後你可以...

noip2011提高組 聰明的質檢員

這道題要找乙個引數 這二分妥妥的。不然就t成翔吧。o o 每一次二分 都要預處理 cnt i 表示 對於當前二分到的引數 前 i 個有多少符合要求 sum i 表示 對於當前二分的引數 前 i 個符合要求的點的點權和 然後就按著題意來吧 找到 使結果比標準值小的 最靠近的那乙個 引數 再考慮這個引數...