Description

我们常常会说这样的话:“X年是自Y年以来降雨量最多的”。它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年。例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说“2005年是自2003年以来最多的”,但不能说“2005年是自2002年以来最多的”由于有些年份的降雨量未知,有的说法是可能正确也可以不正确的。

Solution

抱歉在下实在是读不懂题目.

降雨量:

  1. -3951 1990
  2. -3941 2156

查询

  1. -3951 -3941

应该输出啥?

maybe或者是false?????

Code

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4. #include <algorithm>
  5. // #define int long long
  6. struct Node {
  7. int mx, isfull; Node *ls, *rs;
  8. Node(int _ = 0, int __ = 0, Node *_ls = nullptr, Node *_rs = nullptr) :
  9. mx(_), isfull(__), ls(_ls), rs(_rs) { }
  10. void PushUp() {
  11. mx = std:: max(ls ? ls->mx : 0, rs ? rs->mx : 0);
  12. isfull = (ls ? ls->isfull : 0) bitand (rs ? rs->isfull : 0);
  13. }
  14. void init(int p) {
  15. mx = p, isfull = true;
  16. }
  17. void merge(Node o) {
  18. mx = std:: max(mx, o.mx), isfull = isfull bitand o.isfull;
  19. }
  20. };
  21. class Tree {
  22. int n, lim;
  23. Node *root;
  24. #define LS l, mid, node->ls
  25. #define RS mid + 1, r, node->rs
  26. void insert(int l, int r, Node* node, const int& p, const int& k) {
  27. if (l == r) {
  28. return node->init(k);
  29. }
  30. int mid = ((long long)l + r) >> 1ll;
  31. if (p <= mid) {
  32. if (not node->ls) node->ls = new Node();
  33. insert(LS, p, k);
  34. }
  35. if (p > mid) {
  36. if (not node->rs) node->rs = new Node();
  37. insert(RS, p, k);
  38. }
  39. node->PushUp();
  40. }
  41. Node query(int l, int r, Node* node, const int& L, const int& R) {
  42. if (l >= L and r <= R) return *node;
  43. int mid = ((long long)l + r) >> 1ll;
  44. Node res = Node(0, 1);
  45. if (L <= mid) res.merge(node->ls ? query(LS, L, R) : Node(0, 0));
  46. if (R > mid) res.merge(node->rs ? query(RS, L, R) : Node(0, 0));
  47. return res;
  48. }
  49. int query(int l, int r, Node* node, const int& p) {
  50. if (l == r) return node->mx;
  51. int mid = ((long long)l + r) >> 1ll;
  52. if (p <= mid) return node->ls ? query(LS, p) : -1;
  53. if (p > mid) return node->rs ? query(RS, p) : -1;
  54. }
  55. #undef LS
  56. #undef RS
  57. public:
  58. Tree(int _n) : n(_n), root(new Node()), lim(0) {}
  59. void insert(int p, int k) {
  60. // printf("insert: %d %d\n", p, k);
  61. lim = std:: max(lim, p);
  62. return insert(1, n, root, p, k);
  63. }
  64. inline Node query(int l, int r) {
  65. if (l > r) return false;
  66. // printf("query: %d %d\n", l, r);
  67. return query(1, n, root, l, r);
  68. }
  69. int solution(int k, int p) {
  70. int val = query(1, n, root, p);
  71. // printf("val : %d %d\n", p, val);
  72. if (val == -1) return -1;
  73. Node res = query(k + 1, p - 1);
  74. return val < res.mx ? false : (res.isfull ? true : -1);
  75. }
  76. };
  77. const int Delta = 1e8 + 1;
  78. void test();
  79. signed main () {
  80. // test();
  81. int n;
  82. scanf("%lld", &n);
  83. Tree* T = new Tree(1e9 + 1);
  84. for (int i = 0, y, r; i < n; i += 1) {
  85. scanf("%lld%lld", &y, &r);
  86. T->insert(y + Delta, r);
  87. }
  88. int m;
  89. scanf("%lld", &m);
  90. for (int i = 0, y, r; i < m; i += 1) {
  91. scanf("%lld%lld", &y, &r);
  92. int res = T->solution(y + Delta, r + Delta);
  93. printf("%s\n", ~res ? (res ? "true" : "false") : "maybe");
  94. }
  95. return 0;
  96. }
  97. void test() {
  98. freopen("1.in", "r", stdin);
  99. freopen("1.out", "w", stdout);
  100. }

P2471 [SCOI2007]降雨量的更多相关文章

  1. 洛谷P2471 [SCOI2007] 降雨量 [RMQ,模拟]

    题目传送门 降雨量 题目背景 07四川省选 题目描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X ...

  2. BZOJ1067&P2471 [SCOI2007]降雨量[线段树裸题+细节注意]

    dlntqlwsl 很裸的一道线段树题,被硬生生刷成了紫题..可能因为细节问题吧,我也栽了一次WA50分.不过这个隐藏条件真的对本菜鸡来说不易发现啊. 未知的年份连续的就看成一个就好了,把年份都离散化 ...

  3. 洛谷P2471——[SCOI2007]降雨量

    本机AC提交RE…… 传送门:QAQQAQ 题意:自己看 思路:据说这道题用RMQ做很快,但这道题线段树是可以的 线段树维护一段区间最左年,最右年,是否有间隙和区间最大值 这道题分类讨论是一大难点,主 ...

  4. 【线段树 细节题】bzoj1067: [SCOI2007]降雨量

    主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...

  5. [BZOJ1067][SCOI2007]降雨量

    [BZOJ1067][SCOI2007]降雨量 试题描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格 ...

  6. bzoj 1067: [SCOI2007]降雨量 模擬

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2010  Solved: 503[Submit][Status] ...

  7. 1067: [SCOI2007]降雨量

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2148  Solved: 554[Submit][Status] ...

  8. 【BZOJ1067】[SCOI2007]降雨量 RMQ+特判

    [BZOJ1067][SCOI2007]降雨量 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年 ...

  9. bzoj 1067: [SCOI2007]降雨量

    题目链接: bzoj 1067: [SCOI2007]降雨量 题解: 很简单的一道题,但代码里有许多细节需要注意,切容易出错,调了三个小时OTZ 做一个st表维护区间最大值就 在获得年份在序列中的po ...

随机推荐

  1. gitlab相关

    1.gitlab的概述 1.gitlab是什么 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 基础功能免费,高级功能收费 2.为什么要使用gitla ...

  2. Web Service(上)

    1.XML CDATA指不应由XML解析器进行解析的文本数据. 在XML元素中,<和&是非法的.解析器会把字符<解释为新元素的开始,把字符&解释为字符实体的开始. 某些文本 ...

  3. bzoj2564集合的面积

    题目描述 对于一个平面上点的集合P={(xi,yi )},定义集合P的面积F(P)为点集P的凸包的面积. 对于两个点集A和B,定义集合的和为: A+B={(xiA+xjB,yiA+yjB ):(xiA ...

  4. 【数学】【CF1091D】 New Year and the Permutation Concatenation

    Description 给定一个数 \(n\),将所有 \(1~\sim~n\) 的排列按照字典序放到一个序列中,求有多少长度为 \(n\) 的子序列 \(p_i~p_{i+1}~\dots~p_{i ...

  5. Python 爬虫入门(三)—— 寻找合适的爬取策略

    写爬虫之前,首先要明确爬取的数据.然后,思考从哪些地方可以获取这些数据.下面以一个实际案例来说明,怎么寻找一个好的爬虫策略.(代码仅供学习交流,切勿用作商业或其他有害行为) 1).方式一:直接爬取网站 ...

  6. Chapter7(类) --C++Prime笔记

    类(关键词):数据抽象(数据成员和函数成员),封装(private),构造函数,静态成员 1.判断一个类是否是抽象数据类型,可以看我们对这个类的操作是对你内的数据成员操作,自己编写相应的处理函数,还是 ...

  7. RCNN,fast R-CNN,faster R-CNN

    转自:https://www.cnblogs.com/skyfsm/p/6806246.html object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别. ...

  8. Ubuntu如何同步网络时间

    解决方法: 1.安装ntpdate工具 apt-get install ntpdate 2.将系统时间与网络同步 ntpdate cn.pool.ntp.org 3.将时间写入硬件 hwclock - ...

  9. ElastAlert监控日志告警Web攻击行为

    由于公司需要监控web攻击行为,而因某些原因搭不了waf,才不得不用ElastAlert进行告警,此为前提. 一.ELK安装 Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎 ...

  10. webapi框架搭建-安全机制(四)-可配置的基于角色的权限控制

    webapi框架搭建系列博客 在上一篇的webapi框架搭建-安全机制(三)-简单的基于角色的权限控制,某个角色拥有哪些接口的权限是用硬编码的方式写在接口上的,如RBAuthorize(Roles = ...