日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces Round #540 (Div. 3) Coffee and Coursework

發布時間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #540 (Div. 3) Coffee and Coursework 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于我是直接寫的hard版本的,而hard版本和easy版本只有數據范圍的差距,所以在此只闡述hard版本的題解(easy版也能過,但是easy的數據范圍應該還有其他方法可以偷跑過去)

假設x天可以完成,那么x+1天肯定可以,因為x+1天的第一杯咖啡是沒有損耗的(本題中由于每多一天,咖啡效果-1,所以記作孫損耗)

假設x天無法完成,那么x-1天肯定不行,因為x天起碼第一杯咖啡是沒有損耗的

故此,可看出本題中的天數具有單調性。

那二分得到單調性之后怎么處理呢?

先把n杯咖啡從小到大排序

假設我當前二分的天數是x天,那么我先把前x, 即[n - x + 1, n]最大的咖啡拿過來,然后我往前再拿x杯咖啡

直到當前的[l, r]中有某一個咖啡的大小是大于當前的損耗的,我再次二分找到這一個咖啡

假設是第t杯,我只用加上[t + 1, r]?- 損耗,然后我就不用再往前找咖啡了,因為必定是大于之后的損耗的

那么我把現在的咖啡的效果累加減去損耗后要是大于m,即二分可行,否則二分不行

這里,對于[l, r]的咖啡的值由于只涉及查詢不涉及更新,所以我用了前綴和維護

二分的效率是logN * logN,應該還沒有N大,所以可以看做是O(N)(應該吧)

#include<bits/stdc++.h> #define LL long long using namespace std; const int MAXN = 2e5 + 10;LL cs[MAXN], lei[MAXN]; int n, m;bool check(int x) {LL sum = 0, t = 0;int r = n, l = n - x + 1;while(1){int ans = -1;int tl = l, tr = r;while(tl <= tr){int mid = (tl + tr) >> 1;if(cs[mid] < t){ans = mid;tl = mid + 1;}elsetr = mid - 1;}if(ans == -1){sum += lei[r] - lei[l - 1] - (r - l + 1) * t;r = l - 1;l = (r - x + 1) >= 1 ? (r - x + 1) : 1;}else{if(ans == r){sum += 0;break;}else{sum += lei[r] - lei[ans] - (r - ans) * t;break;}}t ++;if(r < 1)break;}if(sum >= m)return 1;elsereturn 0; } int main() {LL maxx = 0;LL sum = 0;scanf("%d %d", &n, &m);for(int i = 1; i <= n; i ++){scanf("%d", &cs[i]);sum += cs[i];maxx = max (maxx, cs[i]);}if(sum < m){cout << -1 << endl;return 0;}sort (cs + 1, cs + n + 1);for(int i = 1; i <= n; i ++)lei[i] = lei[i - 1] + cs[i];//build(1, n, 1);//cout << 1 << endl;int l = 1, r = n, ans;while(l <= r){int mid = (l + r) >> 1;//cout << "! " << mid << endl;if(check(mid)){ans = mid;r = mid - 1;}elsel = mid + 1;}printf("%d", ans);return 0; }

?

總結

以上是生活随笔為你收集整理的Codeforces Round #540 (Div. 3) Coffee and Coursework的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。