http://www.lydsy.com/JudgeOnline/problem.php?id=1568

写多了就觉着水了。。。

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4.  
  5. using namespace std;
  6.  
  7. #define N 100001
  8.  
  9. double a[N<<],b[N<<];
  10.  
  11. bool have[N<<];
  12.  
  13. long long ans;
  14.  
  15. void read(int &x)
  16. {
  17. x=; char c=getchar();
  18. while(!isdigit(c)) c=getchar();
  19. while(isdigit(c)) { x=x*+c-''; c=getchar(); }
  20. }
  21.  
  22. void change(int k,int l,int r,double A,double B)
  23. {
  24. if(!have[k])
  25. {
  26. have[k]=true;
  27. a[k]=A;
  28. b[k]=B;
  29. return;
  30. }
  31. if(l==r)
  32. {
  33. a[k]=max(a[k],A);
  34. return;
  35. }
  36. else
  37. {
  38. if(A>a[k]+(r-l)*b[k])
  39. {
  40. a[k]=A;
  41. b[k]=B;
  42. return;
  43. }
  44. if(a[k]>A+(r-l)*B) return;
  45. int mid=l+r>>;
  46. if(A<a[k])
  47. {
  48. if(A+(mid-l)*B>a[k]+(mid-l)*b[k])
  49. {
  50. change(k<<,l,mid,a[k],b[k]);
  51. a[k]=A;
  52. b[k]=B;
  53. }
  54. else change(k<<|,mid+,r,A+(mid+-l)*B,B);
  55. }
  56. else
  57. {
  58. if(A+(mid-l)*B>a[k]+(mid-l)*b[k])
  59. {
  60. change(k<<|,mid+,r,a[k]+(mid+-l)*b[k],b[k]);
  61. a[k]=A;
  62. b[k]=B;
  63. }
  64. else change(k<<,l,mid,A,B);
  65. }
  66. }
  67. }
  68.  
  69. void query(int k,int l,int r,int p)
  70. {
  71. if(!have[k]) return;
  72. if(l==r)
  73. {
  74. ans=max(ans,(long long)a[k]);
  75. return;
  76. }
  77. ans=max(ans,(long long)(a[k]+(p-l)*b[k]));
  78. int mid=l+r>>;
  79. if(p<=mid) query(k<<,l,mid,p);
  80. else query(k<<|,mid+,r,p);
  81. }
  82.  
  83. int main()
  84. {
  85. int n,x;
  86. char c[];
  87. double s,p;
  88. read(n);
  89. while(n--)
  90. {
  91. scanf("%s",c);
  92. if(c[]=='Q')
  93. {
  94. read(x);
  95. ans=;
  96. query(,,N-,x);
  97. cout<<ans/<<'\n';
  98. }
  99. else
  100. {
  101. scanf("%lf%lf",&s,&p);
  102. change(,,N-,s,p);
  103. }
  104. }
  105. }

1568: [JSOI2008]Blue Mary开公司

Time Limit: 15 Sec  Memory Limit: 162 MB
Submit: 1706  Solved: 593
[Submit][Status][Discuss]

Description

Input

第一行 :一个整数N ,表示方案和询问的总数。 
接下来N行,每行开头一个单词“Query”或“Project”。 
若单词为Query,则后接一个整数T,表示Blue Mary询问第T天的最大收益。 
若单词为Project,则后接两个实数S,P,表示该种设计方案第一天的收益S,以及以后每天比上一天多出的收益P。
1 <= N <= 100000 1 <= T <=50000 0 < P < 100,| S | <= 10^6 
提示:本题读写数据量可能相当巨大,请选手注意选择高效的文件读写方式。

Output

对于每一个Query,输出一个整数,表示询问的答案,并精确到整百元(以百元为单位,
例如:该天最大收益为210或290时,均应该输出2)。没有方案时回答询问要输出0

Sample Input

10
Project 5.10200 0.65000
Project 2.76200 1.43000
Query 4
Query 2
Project 3.80200 1.17000
Query 2
Query 3
Query 1
Project 4.58200 0.91000
Project 5.36200 0.39000

Sample Output

0
0
0
0
0

bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司的更多相关文章

  1. BZOJ1568: [JSOI2008]Blue Mary开公司【李超树】

    Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词"Query"或"Project". 若单词为Q ...

  2. BZOJ1568: [JSOI2008]Blue Mary开公司

    可以平衡树或线段树维护斜率来做. 还有一种线段树直接打标记的做法: 线段树每个节点存一条线段作为标记,打标记时如果已有标记,则把占优区间小的那个线段下放. #include<cstdio> ...

  3. 2019.02.11 bzoj1568: [JSOI2008]Blue Mary开公司(线段树)

    传送门 题意简述:维护整体加一条线段,求单点极值. 思路: 直接上李超线段树维护即可. 代码: #include<bits/stdc++.h> #define ri register in ...

  4. [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树

    题目大意 题解 这道题需要用到一种叫做李超线段树的东西.我对于李超线段树,是这样理解的: 给节点打下的标记不进行下传,而是仅仅在需要的时候进行下传,这就是所谓永久化标记. 对于这道题,借用一张图, 这 ...

  5. 【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)

    [BZOJ1568][JSOI2008]Blue Mary开公司(李超线段树) 题面 BZOJ 洛谷 题解 是模板题啊. #include<iostream> #include<cs ...

  6. [BZOJ 1568][JSOI2008]Blue Mary开公司

    [BZOJ 1568][JSOI2008]Blue Mary开公司 题意 \(n\) 次操作, 维护一个一次函数集合 \(S\). 有两种操作: 给定 \(b\) 和 \(k\), 向 \(S\) 中 ...

  7. 【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树

    [BZOJ1568][JSOI2008]Blue Mary开公司 Description Input 第一行 :一个整数N ,表示方案和询问的总数.  接下来N行,每行开头一个单词“Query”或“P ...

  8. 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司

    1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 602  Solved: 214[Submit ...

  9. bzoj 1568 [JSOI2008]Blue Mary开公司 超哥线段树

    [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1808  Solved: 639[Submit][Sta ...

随机推荐

  1. [AH/HNOI2017]单旋

    这道题可以用LCT做,开set,LCT,二叉树 操作1:直接开set,找到它要插入的位置,一定是前驱,后缀中deep最大的(显然手玩) 操作2:set+LCT询问路径,直接手动提上去,因为树的形态不变 ...

  2. PowerShell 发布farm solution

    SharePoint PowerShell在SharePoint Product列表里边,然后以管理员权限启动. 1. 添加Solution 到 SharePoint Farm. Add-SPSolu ...

  3. JDBC存在的问题

    1.数据库连接频繁的创建和关闭,缺点是浪费数据库资源,影响操作效率. 设想:使用数据库连接池 2.sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护. ...

  4. NEO从入门到开窗(3) - NEO编译器

    一.啰嗦两句 第一节的时候咱说了C#编译完了之后,就该NEO的编译器搞事情了.我们完全可以按这个节奏搞,手动用NEO的编译器neon编译dll文件生成指令码文件.avm.但是NEO团队给我们写智能合约 ...

  5. vue组件利用formdata图片预览以及上传《转载》

    转载修改 在项目中直接新建一个单文件页,复制一下代码即可       upload组件: <template> <div class="vue-uploader" ...

  6. Python 中 mySQL 中的语句

    class DeleteInventorybusiness(BaseBusiness): def DeleteInventory(self,Delete_goodsID): DeleteInvento ...

  7. 在oracle中,group by后将字符拼接,以及自定义排序

    1.在oracle中,group by后将字符拼接.任务:在学生表中,有studentid和subject两个字段.要求对studentid进行group by分组,并将所选科目拼接在一起.oracl ...

  8. spring Boot+spring Cloud实现微服务详细教程第二篇

    上一篇文章已经说明了一下,关于spring boot创建maven项目的简单步骤,相信很多熟悉Maven+Eclipse作为开发常用工具的朋友们都一目了然,这篇文章主要讲解一下,构建spring bo ...

  9. 笔记:Hibernate 数据库方言表

    关系数据库 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS/ ...

  10. C#设置和获取系统环境变量

    C#设置和获取环境变量 1.前言 本来想拿学校机房的Android编辑器直接粘到自己电脑上用,发现它的eclipse是 32位的,而我的JDK是64位的,于是想到干脆装两个JDK,用C#做一个能够更改 ...