【题目链接】

点击打开链接

【算法】

线段树

此题细节很多,写程序时要细心!

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 50010 struct Node
{
int l,r,mx;
} Tree[MAXN<<]; int i,n,l,r,posl,posr,q,mx;
int sum[MAXN],a[MAXN],y[MAXN]; template <typename T> inline void read(T &x)
{
int f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
template <typename T> inline void write(T x)
{
if (x < )
{
putchar('-');
x = -x;
}
if (x > ) write(x/);
putchar(x%+'');
}
template <typename T> inline void writeln(T x)
{
write(x);
puts("");
}
inline void update(int index)
{
Tree[index].mx = max(Tree[index<<].mx,Tree[index<<|].mx);
}
inline void build(int index,int l,int r)
{
int mid;
Tree[index].l = l; Tree[index].r = r;
if (l == r)
{
Tree[index].mx = a[l];
return;
}
mid = (l + r) >> ;
build(index<<,l,mid);
build(index<<|,mid+,r);
update(index);
}
inline int query_max(int index,int l,int r)
{
int mid;
if (Tree[index].l == l && Tree[index].r == r) return Tree[index].mx;
mid = (Tree[index].l + Tree[index].r) >> ;
if (mid >= r) return query_max(index<<,l,r);
else if (mid + <= l) return query_max(index<<|,l,r);
else return max(query_max(index<<,l,mid),query_max(index<<|,mid+,r));
}
int main() { read(n);
for (i = ; i <= n; i++)
{
read(y[i]);
read(a[i]);
if (i == ) sum[i] = ;
else sum[i] = sum[i-] + (y[i] == y[i-] + );
}
build(,,n);
read(q);
while (q--)
{
read(l); read(r);
posl = lower_bound(y+,y+n+,l) - y;
posr = lower_bound(y+,y+n+,r) - y;
if (r < l)
{
puts("false");
continue;
}
if (posl == posr)
{
if (l == r) puts("true");
else puts("maybe");
continue;
}
if (posl + == posr)
{
if (y[posr] == r && y[posl] != l && a[posr] <= a[posl]) puts("false");
else if (y[posl] != l || y[posr] != r) puts("maybe");
else if (y[posl] != l && y[posr] != r) puts("maybe");
else
{
if (a[posr] > a[posl]) puts("false");
else
{
if (l + == r) puts("true");
else puts("maybe");
}
}
continue;
}
if (y[posl] == l && y[posr] == r)
{
if (sum[posr] - sum[posl] == r - l)
{
mx = query_max(,posl+,posr-);
if (a[posr] > mx && a[posr] <= a[posl]) puts("true");
else puts("false");
} else
{
mx = query_max(,posl+,posr-);
if (a[posr] <= mx || a[posr] > a[posl]) puts("false");
else puts("maybe");
}
continue;
}
if (y[posl] == l)
{
mx = query_max(,posl+,posr-);
if (mx >= a[posl]) puts("false");
else puts("maybe");
continue;
}
if (y[posr] == r)
{
mx = query_max(,posl,posr-);
if (mx >= a[posr]) puts("false");
else puts("maybe");
continue;
}
puts("maybe");
} return ; }

【SCOI 2007】 降雨量的更多相关文章

  1. 【BZOJ 1069】【SCOI 2007】最大土地面积 凸包+旋转卡壳

    因为凸壳上对踵点的单调性所以旋转卡壳线性绕一圈就可以啦啦啦--- 先求凸包,然后旋转卡壳记录$sum1$和$sum2$,最后统计答案就可以了 #include<cmath> #includ ...

  2. 图论(网络流):SCOI 2007 修车

    同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小 ...

  3. 解题:SCOI 2007 蜥蜴

    题面 拆点跑最大流 所有能跑出去的点连向汇点,容量为inf 原点连向所有初始有蜥蜴的点,容量为1 每根柱子拆成两个点“入口”和“出口”,入口向出口连容量为高度的边,出口向别的有高度的柱子的入口连容量为 ...

  4. [SCOI 2007] 修车

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1070 [算法] 首先 , 我们发现 , 在倒数第i个修车会对答案产生i * k的贡献 ...

  5. [ SCOI 2007 ] Perm

    \(\\\) \(Description\) 给出只包括多个\(0\text~ 9\)的数字集,求有多少个本质不同的全排列,使得组成的数字能够整除\(M\). \(|S|\in [1,10]\),\( ...

  6. [SCOI 2007] 排列

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1072 [算法] 状压DP [代码] #include<bits/stdc++. ...

  7. 【BZOJ1067】【POJ2637】降雨量

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

  8. C++之路进阶——codevs2439(降雨量)

    2439 降雨量 2007年省队选拔赛四川  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 大师 Master       题目描述 Description 我们常常会说这样的话 ...

  9. BZOJ-1067 降雨量 线段树+分类讨论

    这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...

随机推荐

  1. 第十一节:pandas统计函数

    1.pct_change()计算增长比例 2.cov()协方差 3.corr()相关系数 4.rank()数据排名 5.numpy聚合函数

  2. Uva 816 Abbott的复仇(三元组BFS + 路径还原)

    题意: 有一个最多9*9个点的迷宫, 给定起点坐标(r0,c0)和终点坐标(rf,cf), 求出最短路径并输出. 分析: 因为多了朝向这个元素, 所以我们bfs的队列元素就是一个三元组(r,c,dir ...

  3. cadence中画焊盘注意事项

    贴片焊盘的层面剖析图如下: 其中Paste Mask Top层用于制作钢网,可以做成与Top层相同的大小.阻焊层一般比顶层大0.1mm(方形焊盘的长,宽,圆形焊盘的直径). 助焊层与阻焊层区别 两个层 ...

  4. xtu summer individual 6 F - Water Tree

    Water Tree Time Limit: 4000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Orig ...

  5. 全文搜索(A-4)-推荐系统架构

    推荐系统向用户推荐物品有三种情况. 推荐和用户已表示喜欢的物品相似的物品. 推荐和用户有相似偏好的用户喜欢的物品. 推荐包含用户偏好特征的物品.

  6. hihoCoder#1042 跑马圈地

    原题地址 经网友jokeren提醒,后面给出的代码虽然可以AC原题,但存在bug,主要是在矩形覆盖情况的判断上处理的不够完全. 看似挺复杂的,但是仔细分析一下可以化简: 首先,不用枚举周长,因为更长的 ...

  7. hihoCoder#1082 然而沼跃鱼早就看穿了一切

    原题地址 字符串匹配+替换 注意替换串和原串长度是不等的,所以替换完还要进行收缩 可以顺带练习一下KMP 代码: #include <iostream> #include <cstr ...

  8. MTK平台如何定位显示花屏和界面错乱等绘制异常的问题?

    [DESCRIPTION] 在测试手机各项功能过程中,经常会遇到概率性复现“屏幕画花了,界面画错乱了等绘制异常问题”,而且概率还非常小: 这类问题请不要直接提交eService,而是先请测试人员及工程 ...

  9. JDK源码解析(一)ArrayList源码解析

    这里为了方便写注释,我是把ArrayList的源码复制下来放到自己创建的类里面的 这个变量则指向具体存放数据的数组 看下构造函数吧 点进去看下LinkedList是怎么数组化的 很弱智吧,就是创建一个 ...

  10. 【CodeChef】KNGHTMOV(方案数DP)

    题意: 考虑一张无限大的方格棋盘.我们有一个“骑士”,它必须从(0,0)格开始,按照如下规则,移动至(X,Y)格:每一步,它只能从(u,v)格移动至(u+Ax,v+Ay)或者(u+Bx,v+By).注 ...