找不着原题了。

原题大概就是给你一条直线上n个点需要被覆盖的最小次数和m条需要花费1的线段的左右端点和1条[1,n]的每次花费为t的大线段。

问最小花费使得所有点的覆盖数都达到最小覆盖数。

感觉这个函数的斜率是单调的,所以就码了一个二分斜率。

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define maxn 100005
  4. using namespace std;
  5. const ll inf=1ll<<62ll;
  6. struct lines{
  7. int l,r;
  8. bool operator <(const lines &U)const{
  9. return l==U.l?r>U.r:l<U.l;
  10. }
  11. }a[maxn],b[maxn];
  12. int n,m,t,rig,p[maxn];
  13. int le,ri,mid,an,cnt=0,bt;
  14. int cover[maxn],lef[maxn];
  15.  
  16. inline void prework(){
  17. sort(a+1,a+m+1);
  18. for(int i=1;i<=m;i++) if(a[i].r>rig){
  19. b[++cnt]=a[i];
  20. rig=a[i].r;
  21. }
  22.  
  23. for(int i=1;i<=n;i++){
  24. ri=max(ri,p[i]);
  25. if(i<b[1].l||i>b[cnt].r) bt=max(bt,p[i]);
  26. }
  27. }
  28.  
  29. inline ll calc(int x){
  30. if(x<bt) return inf;
  31. ll ans=x*(ll)t;
  32. int now=0,pos=1;
  33.  
  34. fill(cover+1,cover+n+1,0);
  35. for(int i=1;i<=n;i++) lef[i]=max(0,p[i]-x);
  36.  
  37. for(int i=1;i<=n;i++){
  38. while(pos<cnt&&b[pos+1].l<=i) pos++;
  39.  
  40. printf("%d %d\n",i,b[pos].l);
  41.  
  42. now+=cover[i];
  43. if(now<lef[i]){
  44. int derta=lef[i]-now;
  45. cover[b[pos].r+1]-=derta;
  46. now+=derta;
  47. ans+=(ll)derta;
  48. }
  49. }
  50.  
  51. return ans;
  52. }
  53.  
  54. inline void solve(){
  55. le=bt;
  56. while(le<=ri){
  57. mid=le+ri>>1;
  58. if(calc(mid)-calc(mid-1)<0) an=mid,le=mid+1;
  59. else ri=mid-1;
  60. }
  61.  
  62. printf("%lld\n",calc(an));
  63. }
  64.  
  65. int main(){
  66. freopen("C.in","r",stdin);
  67. freopen("C.out","w",stdout);
  68.  
  69. scanf("%d%d%d",&n,&m,&t);
  70. for(int i=1;i<=n;i++) scanf("%d",p+i);
  71. for(int i=1;i<=m;i++) scanf("%d%d",&a[i].l,&a[i].r);
  72.  
  73. prework();
  74. solve();
  75.  
  76. return 0;
  77. }

  

某考试 T3 C的更多相关文章

  1. 2018-8-10考试 T3. 朝暮(akekure)

    题目大意:有$n$个点和$m$条边的图($n - 1 \leq m \leq n + 5$),每个点要么黑要么白,两个黑点不可以相邻,问方案数 题解:可以发现当图为一棵树的时候只需要一个树形$DP$ ...

  2. 考试T3麻将

    这题就是一个简单的暴力,但考试的时候不知道脑子在想什么,什么都没打出来,也许是我想的太多了... 这道题对于不会打麻将的人来说还是有点难理解规则的,我没说过我会打麻将,这里是题目链接. 20分思路,利 ...

  3. 2019.2.25考试T3, 离线+线段树

    \(\color{#0066ff}{题解}\) #include<bits/stdc++.h> #define LL long long LL in() { char ch; LL x = ...

  4. 2019.2.14 考试T3 交互题

    \(\color{#0066ff}{ 题目描述 }\) 由于机房被成功拯救了,花_Q很高兴,花_Q生成了一个 0 到 N - 1 的排列(排列的下标从 0 到 N - 1 ).保证排列中 0 在 N ...

  5. 某考试 T3 Try to find out the wrong in the test

    Discription Hint: 对于 100% 的数据, n<=10^6.

  6. 某考试 T3 bitboard

                    bitboardDiscription    天才发明家小K 制造了一块比特板.板子上有2^n个比特元,编号为0 ∼ 2^n−1.每个比特元

  7. 某考试 T3 sine

    推完一波式子之后发现是个矩阵23333. 其实只要发现是矩阵之后就是个水题了. #include<bits/stdc++.h> #define ll long long using nam ...

  8. 16.1113 模拟考试T3

    城堡[问题描述]给定一张N个点M条边的无向连通图,每条边有边权.我们需要从M条边中选出N − 1条, 构成一棵树. 记原图中从 1 号点到每个节点的最短路径长度为?Di ,树中从 1 号点到每个节点的 ...

  9. 题解【2.23考试T3】val

    3. val[题目描述] 这是一道传统题,源代码的文件名为 val.cpp/c/pas. 有一个值初始为 0,接下来 n 次你可以令其在之前基础上+2 或+1 或-1.你需要保证,这个值在整个过程中达 ...

随机推荐

  1. Dataflow编程模型和spark streaming结合

    Dataflow编程模型和spark streaming结合 主要介绍一下Dataflow编程模型的基本思想,后面再简单比较一下Spark  streaming的编程模型 == 是什么 == 为用户提 ...

  2. PHP FILTER_VALIDATE_IP 过滤器

    FILTER_VALIDATE_IP 过滤器把值作为 IP 进行验证,用于验证 IP 是否合法,支持 IPV6 验证 例子 <?php $ip = "192.168.0.1" ...

  3. $.ajax相关用法

      ? $.ajax({             type: "GET",             url: "Services/EFService.svc/Member ...

  4. 【转】Unity3D学习日记(一)使用UGUI制作虚拟摇杆

    http://blog.csdn.net/begonia__z/article/details/51170059 如今手机游戏玩法多种多样,尤其使用虚拟摇杆进行格斗类游戏开发或者是MMORPG成为了主 ...

  5. htmilunit-- 针对抓取js生成的数据

    public static String  getHtml(String html){        // 模拟一个浏览器          @SuppressWarnings("resou ...

  6. mysql错误之2014

    error:2014 Commands out of sync; you can't run this command now 这个错误号我也真是醉了. 一直纠结于为什么存储过程执行完,commit操 ...

  7. BZOJ1797 [Ahoi2009]Mincut 最小割 【最小割唯一性判定】

    题目 A,B两个国家正在交战,其中A国的物资运输网中有N个中转站,M条单向道路.设其中第i (1≤i≤M)条道路连接了vi,ui两个中转站,那么中转站vi可以通过该道路到达ui中转站,如果切断这条道路 ...

  8. 微信小程序微信支付流程

    1.小程序调用wx.login获取登录凭证code wx.login(无请求参数)返回code(有效期5分钟) wx.login({ success:function(res){ //get res. ...

  9. BZOJ2916 [Poi1997]Monochromatic Triangles 数论

    答案等于总三角形数-不合法数 一个不合法三角形一定存在两个顶点,在这个三角形中这个顶点的角的两边不同色 #include<cstring> #include<cmath> #i ...

  10. 关于在生命周期当中进行setState操作的问题

    当需要监听组件的属性改变的时候有两个生命周期componentWillReceiveProps和componentWillUpdate 当使用componentWillUpdate的时候可以获取到将要 ...