vijos1740 聰明的質監員 (二分、區間求和)

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   io   strong   資料   

http://www.rqnoj.cn/problem/657

https://www.vijos.org/p/1740

P1740聰明的質檢員請登入後遞交標籤:NOIP提高組2011[顯示標籤] 描述

小 T 是一名品質監督員,最近負責檢驗一批礦產的品質。這批礦產共有n個礦石,從1到n逐一編號,每個礦石都有自己的重量wi以及價值vi。檢驗礦產的流程是:
1、給定m個區間[Li,Ri];
2、選出一個參數W;
3、對於一個區間[Li,Ri],計算礦石在這個區間上的檢驗值Yi:
Yi = ∑1*∑vj,j∈[Li, Ri]且wj ≥ W,j是礦石編號
這批礦產的檢驗結果Y 為各個區間的檢驗值之和。即:Y = ∑Yi,i ∈[1, m]
若這批礦產的檢驗結果與所給標準值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。注意:不同區間可能重合或相互重疊。

輸出格式

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

範例1範例輸入1[複製]
5 3 151 52 53 54 55 51 52 43 3
範例輸出1[複製]
10
限制

1s

提示

範例說明:當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 ≤ 10^6,0 < S ≤ 10^12,1 ≤ Li ≤ Ri ≤ n。

來源

NOIp2011提高組Day2第二題

大意:給你一排物品,有重量wi,價值vi,再給你一排區間。有一個W,對每個區間求Σ1*Σvi,兩個Σ都是符合w[j]>=W的j,也就是若一個區間裡有3個物品的w大於等於W,則這個區間的值為3*(w1+w2+w3)。要使各區間的這個值的和與給定值S的絕對值最小,求這個最小的絕對值。

題解:二分+區間求和。

因為各區間值的和隨W單調遞減,可以二分W。每次二分都要怒求好多區間的區間和,所以我們每次二分,都求一次根據這個W產生的首碼和,方便求區間和。

 1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include<cstdio> 3 #include<cmath> 4 #include<iostream> 5 #include<cstring> 6 #include<algorithm> 7 #include<cmath> 8 #include<map> 9 #include<set>10 #include<stack>11 #include<queue>12 using namespace std;13 #define ll long long14 #define usint unsigned int15 #define mz(array) memset(array, 0, sizeof(array))16 #define minf(array) memset(array, 0x3f, sizeof(array))17 #define REP(i,n) for(int i=0;i<(n);i++)18 #define FOR(i,x,n) for(int i=(x);i<=(n);i++)19 #define RD(x) scanf("%d",&x)20 #define RD2(x,y) scanf("%d%d",&x,&y)21 #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)22 #define WN(x) printf("%d\n",x);23 #define RE  freopen("D.in","r",stdin)24 #define WE  freopen("1biao.out","w",stdout)25 26 const int maxn=222222;27 int w[maxn],v[maxn];28 int L[maxn],R[maxn];29 int n,m;30 ll S;31 32 ll ss[maxn],cn[maxn];33 34 void check(ll a[],int n){35     for(int i=0;i<n;i++)36         printf("%5lld ",a[i]);37     puts("");38 }39 40 ll gank(int W) {41     ll re=0;42     ss[0]=0;43     cn[0]=0;44     for(int i=1; i<=n; i++) {45         if(w[i-1]>=W) {46             ss[i]=ss[i-1]+v[i-1];47             cn[i]=cn[i-1]+1;48         } else {49             ss[i]=ss[i-1];50             cn[i]=cn[i-1];51         }52     }53     for(int i=0; i<m; i++) {54         re+=(cn[R[i]]-cn[L[i]-1])*(ss[R[i]]-ss[L[i]-1]);55 //      cout<<cn[R[i]]-cn[L[i]-1]<<‘*‘<<ss[R[i]]-ss[L[i]-1]<<endl;56     }57 //    check(ss,n+1);58 //    check(cn,n+1);59 //    printf("↑W=%d,re=%lld\n",W,re);60     return re;61 }62 63 int main() {64     int i,j,l,r,mid,maxr;65     while(scanf("%d%d%lld",&n,&m,&S)!=EOF) {66         maxr=0;67         REP(i,n) {68             scanf("%d%d",&w[i],&v[i]);69             maxr=max(maxr,w[i]+1);70         }71         REP(i,m) {72             scanf("%d%d",&L[i],&R[i]);73             //L[i]--;74             //R[i]--;75         }76         l=1;77         r=maxr;78         while(l<=r) {79             mid=(l+r)>>1;80             if(S>gank(mid)) r=mid-1;81             else l=mid+1;82         }83         //cout<<mid<<‘,‘<<l<<‘,‘<<r<<endl;84         ll t=abs(S-gank(mid));85         t=min(t,abs(S-gank(l)));86         t=min(t,abs(S-gank(r)));87         printf("%lld\n",t);88     }89     return 0;90 }
View Code

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.