聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)
生活随笔
收集整理的這篇文章主要介紹了
聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
聰明的質監員
?2011年NOIP全國聯賽提高組
?時間限制: 1 s ?空間限制: 128000 KB ?題目等級 : 黃金 Gold ? 題目描述?Description 小 T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。檢驗礦產的流程是:見圖 ? 若這批礦產的檢驗結果與所給標準值S 相差太多,就需要再去檢驗另一批礦產。小T不想費時間去檢驗另一批礦產,所以他想通過調整參數W 的值,讓檢驗結果盡可能的靠近標準值S,即使得S-Y 的絕對值最小。請你幫忙求出這個最小值。 輸入描述?Input Description第一行包含三個整數 n,m,S,分別表示礦石的個數、區間的個數和標準值。
接下來的 n 行,每行2 個整數,中間用空格隔開,第i+1 行表示i 號礦石的重量wi 和價值vi 。
接下來的 m 行,表示區間,每行2 個整數,中間用空格隔開,第i+n+1 行表示區間[Li,Ri]的兩個端點Li 和Ri。注意:不同區間可能重合或相互重疊。
輸出只有一行,包含一個整數,表示所求的最小值。
樣例輸入?Sample Input5 3 15
1 5
2 5
3 5
4 5
5 5
1 5
2 4
3 3
10
數據范圍及提示?Data Size & Hint當 W 選4 的時候,三個區間上檢驗值分別為20、5、0,這批礦產的檢驗結果為25,此時與標準值S 相差最小為10。
數據范圍
對于 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越大,Y越小 可以二分W。則問題轉化為求 abs(f(W)-S)的最小值。 如何快速求f(W) 發現可以前綴和預處理,兩個前綴和,一個記錄大于W 的Σvi 一個記錄大于W 的個數。 嗯,ans初始值往死大死大里設,不然就莫名其妙WA WA WA */ #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib>#define N 200007 #define ll long longusing namespace std; ll n,m,k,ans,cnt,S,Y; ll w[N],v[N],L[N],R[N]; ll sum[N],sum2[N];inline ll read() {ll x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f; }int main() {n=read();m=read();S=read();for(ll i=1;i<=n;i++) w[i]=read(),v[i]=read(),k=max(k,w[i]);for(ll i=1;i<=m;i++) L[i]=read(),R[i]=read();ans=999999999999999999;ll l=0,r=k+1,mid;while(l<=r){mid=l+r>>1;Y=0;for(ll i=1;i<=n;i++){if(w[i]>=mid) sum[i]=sum[i-1]+v[i],sum2[i]=sum2[i-1]+1;else sum[i]=sum[i-1],sum2[i]=sum2[i-1];} for(ll i=1;i<=m;i++)Y+=(sum[R[i]]-sum[L[i]-1])*(sum2[R[i]]-sum2[L[i]-1]);if(Y-S>=0) ans=min(ans,abs(Y-S)),l=mid+1;else ans=min(ans,abs(Y-S)),r=mid-1;}printf("%lld\n",ans);return 0; }?
轉載于:https://www.cnblogs.com/L-Memory/p/7732081.html
總結
以上是生活随笔為你收集整理的聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泛微协同办公平台E-cology9.0版
- 下一篇: Graphics.DrawRectang