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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

某考试 T3 C

發布時間:2024/4/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 某考试 T3 C 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

找不著原題了。

原題大概就是給你一條直線上n個點需要被覆蓋的最小次數和m條需要花費1的線段的左右端點和1條[1,n]的每次花費為t的大線段。

問最小花費使得所有點的覆蓋數都達到最小覆蓋數。

?

感覺這個函數的斜率是單調的,所以就碼了一個二分斜率。

?

#include<bits/stdc++.h> #define ll long long #define maxn 100005 using namespace std; const ll inf=1ll<<62ll; struct lines{int l,r;bool operator <(const lines &U)const{return l==U.l?r>U.r:l<U.l;} }a[maxn],b[maxn]; int n,m,t,rig,p[maxn]; int le,ri,mid,an,cnt=0,bt; int cover[maxn],lef[maxn];inline void prework(){sort(a+1,a+m+1);for(int i=1;i<=m;i++) if(a[i].r>rig){b[++cnt]=a[i];rig=a[i].r;}for(int i=1;i<=n;i++){ri=max(ri,p[i]);if(i<b[1].l||i>b[cnt].r) bt=max(bt,p[i]);} } inline ll calc(int x){if(x<bt) return inf;ll ans=x*(ll)t;int now=0,pos=1;fill(cover+1,cover+n+1,0);for(int i=1;i<=n;i++) lef[i]=max(0,p[i]-x);for(int i=1;i<=n;i++){while(pos<cnt&&b[pos+1].l<=i) pos++;printf("%d %d\n",i,b[pos].l);now+=cover[i];if(now<lef[i]){int derta=lef[i]-now;cover[b[pos].r+1]-=derta;now+=derta;ans+=(ll)derta;}}return ans; }inline void solve(){le=bt;while(le<=ri){mid=le+ri>>1;if(calc(mid)-calc(mid-1)<0) an=mid,le=mid+1;else ri=mid-1;}printf("%lld\n",calc(an)); }int main(){freopen("C.in","r",stdin);freopen("C.out","w",stdout);scanf("%d%d%d",&n,&m,&t);for(int i=1;i<=n;i++) scanf("%d",p+i);for(int i=1;i<=m;i++) scanf("%d%d",&a[i].l,&a[i].r);prework();solve();return 0; }

  

轉載于:https://www.cnblogs.com/JYYHH/p/8509583.html

總結

以上是生活随笔為你收集整理的某考试 T3 C的全部內容,希望文章能夠幫你解決所遇到的問題。

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