noip2011提高組 聰明的質檢員

2021-06-28 15:49:47 字數 999 閱讀 5420

這道題要找乙個引數 這二分妥妥的。。。不然就t成翔吧。。。o(∩_∩)o~

每一次二分 都要預處理  cnt[i]表示  對於當前二分到的引數  前 i 個有多少符合要求

sum[i]表示  對於當前二分的引數  前 i 個符合要求的點的點權和

然後就按著題意來吧

找到 使結果比標準值小的  最靠近的那乙個 引數  再考慮這個引數+1  就可以了

同樣  求出當前引數  和引數+1 時的 |s-y|  再輸出小的  就好了

時間複雜度  nmlogn

#include#include#include#include#define ll long long

#define maxn 200000+10

using namespace std;

ll an;

int n,m;

ll s;

int cnt[maxn];

ll sum[maxn];

int v[maxn];

int w[maxn];

int lef[maxn];

int rig[maxn];

int l,r;

void readdata()

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

scanf("%d%d",&lef[i],&rig[i]);

}bool check(int res)

else

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

an += (sum[rig[i]] - sum[lef[i] - 1]) * (cnt[rig[i]] - cnt[lef[i] - 1]);

if (an <= s)

return 1;

else return 0;

}void erfen()

r = mid ; }

else

}}int main()

NOIP 2011 提高組 聰明的質監員

二分 字首和 因為w有已知範圍,即 min 1,max 1 且它會y隨著w的增大而減小,隨著w的減小而增大,所以顯然可以二分。二分的時候區間肯定不能直接列舉了,對於乙個區間的求和以及滿足個數的求解,我們用2個字首和處理即可。可能你們有人會想題目是 s y 那麼二分是否能保證最優呢?實際上是可以的,當...

NOIP2011提高組 聰明的質監員

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

NOIP2011提高組 聰明的質檢員

這道題很明顯要用二分猜答案,猜w的值,再來check。這裡我用的字首和的方法來check,求出前i個大於w 的個數和價值和,然後列舉每乙個區間,算就好了。注 要注意用longlong 考試的時候我就是這個錯了 具體程式如下 include include include include includ...