CF535C Tavas and Karafs 二分 + 结论
傳送門
題意:
定義第iii個(gè)數(shù)是a+(i?1)?ba+(i-1)*ba+(i?1)?b,先有qqq個(gè)詢問,每次詢問給你l,t,ml,t,ml,t,m代表你可以操作ttt次,每次可以將最多mmm個(gè)數(shù)減111,每次都需要回答從lll開始, 最遠(yuǎn)到第幾個(gè)數(shù),能在執(zhí)行完這些操作之后[l,r][l,r][l,r]內(nèi)的數(shù)被減成000。
1≤a,b≤1e6,1≤q≤1e5,1≤l,t,m≤1e61\le a,b\le 1e6,1\le q\le 1e5,1\le l,t,m\le 1e61≤a,b≤1e6,1≤q≤1e5,1≤l,t,m≤1e6
思路:
顯然可以二分rrr的位置,讓后考慮怎么檢查答案。
這里有個(gè)結(jié)論,判斷這個(gè)區(qū)間是否能都被減到000需要滿足以下兩個(gè)條件:
第二個(gè)顯然,第一個(gè)背過就行。。
關(guān)于第一個(gè)的證明,lclclc有一個(gè)類似的題,貼個(gè)個(gè)鏈接:
鏈接
這個(gè)題的模型就是有mmm個(gè)電池,每個(gè)電池都有容量cic_ici?,有nnn個(gè)電腦,每個(gè)電腦每分鐘都需使用某個(gè)電池的一個(gè)電量,問能使所有電腦都正常運(yùn)行的最長(zhǎng)時(shí)間是多少。
這個(gè)題就是二分最長(zhǎng)時(shí)間,設(shè)sum=∑min(ci,mid)sum=\sum min(c_i,mid)sum=∑min(ci?,mid),那么電腦能運(yùn)行midmidmid分鐘的充要條件就是mid?n≤summid*n\le summid?n≤sum。
#include<bits/stdc++.h> #define X first #define Y second #define L (u<<1) #define R (u<<1|1) #define Mid (tr[u].l+tr[u].r>>1) #define pb push_back using namespace std;const int N=1000010,INF=0x3f3f3f3f,mod=1e9+7; typedef long long LL;LL a,b,n;LL get(LL l,LL r) {LL n=r-l+1;LL st=a+(l-1)*b;LL ed=a+(r-1)*b;return n*(st+ed)/2; }void solve() {cin>>a>>b>>n;while(n--) {LL l,t,m;scanf("%lld%lld%lld",&l,&t,&m);LL ls=l,rs=1e9,ans=-1;while(ls<=rs) {LL mid=ls+rs>>1;if(get(l,mid)<=t*m&&a+(mid-1)*b<=t) ans=mid,ls=mid+1;else rs=mid-1;}printf("%lld\n",ans);} }int main() {int _=1;while(_--) {solve();}return 0; }總結(jié)
以上是生活随笔為你收集整理的CF535C Tavas and Karafs 二分 + 结论的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 玩法多样不仅仅是手机秒变笔记本电脑手机秒
- 下一篇: 小鹏逆袭成功了?G9和P7车系10月销量
