Description

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

Solution

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

降雨量:

-3951 1990
-3941 2156

查询

-3951 -3941

应该输出啥?

maybe或者是false?????

Code

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
// #define int long long
struct Node {
int mx, isfull; Node *ls, *rs;
Node(int _ = 0, int __ = 0, Node *_ls = nullptr, Node *_rs = nullptr) :
mx(_), isfull(__), ls(_ls), rs(_rs) { }
void PushUp() {
mx = std:: max(ls ? ls->mx : 0, rs ? rs->mx : 0);
isfull = (ls ? ls->isfull : 0) bitand (rs ? rs->isfull : 0);
}
void init(int p) {
mx = p, isfull = true;
}
void merge(Node o) {
mx = std:: max(mx, o.mx), isfull = isfull bitand o.isfull;
}
};
class Tree {
int n, lim;
Node *root;
#define LS l, mid, node->ls
#define RS mid + 1, r, node->rs
void insert(int l, int r, Node* node, const int& p, const int& k) {
if (l == r) {
return node->init(k);
}
int mid = ((long long)l + r) >> 1ll;
if (p <= mid) {
if (not node->ls) node->ls = new Node();
insert(LS, p, k);
}
if (p > mid) {
if (not node->rs) node->rs = new Node();
insert(RS, p, k);
}
node->PushUp();
}
Node query(int l, int r, Node* node, const int& L, const int& R) {
if (l >= L and r <= R) return *node;
int mid = ((long long)l + r) >> 1ll;
Node res = Node(0, 1);
if (L <= mid) res.merge(node->ls ? query(LS, L, R) : Node(0, 0));
if (R > mid) res.merge(node->rs ? query(RS, L, R) : Node(0, 0));
return res;
}
int query(int l, int r, Node* node, const int& p) {
if (l == r) return node->mx;
int mid = ((long long)l + r) >> 1ll;
if (p <= mid) return node->ls ? query(LS, p) : -1;
if (p > mid) return node->rs ? query(RS, p) : -1;
}
#undef LS
#undef RS
public:
Tree(int _n) : n(_n), root(new Node()), lim(0) {}
void insert(int p, int k) {
// printf("insert: %d %d\n", p, k);
lim = std:: max(lim, p);
return insert(1, n, root, p, k);
}
inline Node query(int l, int r) {
if (l > r) return false;
// printf("query: %d %d\n", l, r);
return query(1, n, root, l, r);
}
int solution(int k, int p) {
int val = query(1, n, root, p);
// printf("val : %d %d\n", p, val);
if (val == -1) return -1;
Node res = query(k + 1, p - 1);
return val < res.mx ? false : (res.isfull ? true : -1);
}
};
const int Delta = 1e8 + 1;
void test();
signed main () {
// test();
int n;
scanf("%lld", &n);
Tree* T = new Tree(1e9 + 1);
for (int i = 0, y, r; i < n; i += 1) {
scanf("%lld%lld", &y, &r);
T->insert(y + Delta, r);
}
int m;
scanf("%lld", &m);
for (int i = 0, y, r; i < m; i += 1) {
scanf("%lld%lld", &y, &r);
int res = T->solution(y + Delta, r + Delta);
printf("%s\n", ~res ? (res ? "true" : "false") : "maybe");
}
return 0;
} void test() {
freopen("1.in", "r", stdin);
freopen("1.out", "w", stdout);
}

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. nginx 配置 phpmyadmin

    server { listen 8092; server_name *.xxx.com; root /home/users/cuijian04/odp302/app/phpmyadmin; set $ ...

  2. MVC中使用RadioButtonFor

    http://shw3588.blog.163.com/blog/static/6507576201321395845538/ 1 进行初始化 <%=Html.RadioButtonFor(mo ...

  3. C#线程篇---解答线程之惑(2)

    我们都知道,在这个行业,追求的就是用最少的时间学最多的知识,这是我写这个系列最想达到的目标,在最快的时间内,帮助更多的人学习更多的线程知识. 前一篇,讲述了线程基础,给大家铺垫了一个基础,这一篇着重介 ...

  4. RabbitMQ 相关概念

    RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收.存储和转发消息.可以把消息传递的过程想象成:当你讲一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ ...

  5. Kubernetes--kubectl

    一.Kubectl命令行说明 类型 命令 描述 基础命令 create  通过文件名或标准输入创建资源 expose  将一个资源公开为一个新的kubernetes服务 run 创建并运行一个特定的镜 ...

  6. kubernetes挂载ceph rbd和cephfs的方法

    目录 k8s挂载Ceph RBD PV & PVC方式 创建secret 创建PV 创建PVC 创建deployment挂载PVC StorageClass方式 创建secret 创建Stor ...

  7. jenkins集成sonarqube代码审核

    目前在持续集成领域,除了后起之秀travis ci,在老牌工具中,最著名的还是非jenkins莫属.本篇文章简单的说一声jenkins与sonarqube的集成来实现代码的静态审核. 在这里不详细罗列 ...

  8. 发现视口(窗口)自适应的新大陆!!vw、vh

    从事前端已经1年了,一直为背景自适应铺满整个屏幕而苦苦发愁,因为要适配不同的pc显示器,所以高度不能写死,但是写(height:100%)并不能实现,愁死我了~我要不用写好的css框架实现或者自己写j ...

  9. Nginx记录-Nginx配置

    1. 启动,停止和重新加载Nginx配置 要启动nginx,请运行可执行文件. 当nginx启动后,可以通过使用-s参数调用可执行文件来控制它. 使用以下语法: nginx -s signal 信号( ...

  10. java 修饰符总结

    java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种.    1.权限访问修饰符    public,protected,default,private,这四种级别 ...