【SCOI 2007】 降雨量
【题目链接】
【算法】
线段树
此题细节很多,写程序时要细心!
【代码】
#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】 降雨量的更多相关文章
- 【BZOJ 1069】【SCOI 2007】最大土地面积 凸包+旋转卡壳
因为凸壳上对踵点的单调性所以旋转卡壳线性绕一圈就可以啦啦啦--- 先求凸包,然后旋转卡壳记录$sum1$和$sum2$,最后统计答案就可以了 #include<cmath> #includ ...
- 图论(网络流):SCOI 2007 修车
同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小 ...
- 解题:SCOI 2007 蜥蜴
题面 拆点跑最大流 所有能跑出去的点连向汇点,容量为inf 原点连向所有初始有蜥蜴的点,容量为1 每根柱子拆成两个点“入口”和“出口”,入口向出口连容量为高度的边,出口向别的有高度的柱子的入口连容量为 ...
- [SCOI 2007] 修车
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1070 [算法] 首先 , 我们发现 , 在倒数第i个修车会对答案产生i * k的贡献 ...
- [ SCOI 2007 ] Perm
\(\\\) \(Description\) 给出只包括多个\(0\text~ 9\)的数字集,求有多少个本质不同的全排列,使得组成的数字能够整除\(M\). \(|S|\in [1,10]\),\( ...
- [SCOI 2007] 排列
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1072 [算法] 状压DP [代码] #include<bits/stdc++. ...
- 【BZOJ1067】【POJ2637】降雨量
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3004 Solved: 767[Submit][Status] ...
- C++之路进阶——codevs2439(降雨量)
2439 降雨量 2007年省队选拔赛四川 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description 我们常常会说这样的话 ...
- BZOJ-1067 降雨量 线段树+分类讨论
这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...
随机推荐
- 空循环导致CPU使用率很高
业务背景 业务背景就是需要将多张业务表中的数据增量同步到一张大宽表中,后台系统基于这张大宽表开展业务,所以就开发了一个数据同步工具,由中间件采集binlog消息到kafka里,然后我去消费,实现增量同 ...
- 洛谷 4933 洛谷10月月赛II T2 大师
[题解] f[i][j]表示最后一个数为h[i],公差为j的等差数列的个数.n方枚举最后一个数和倒数第二个数转移即可.注意公差可能为负数,需要移动为正数再作为下标. #include<cstdi ...
- DHU Club Festival(数学)
链接: http://acm.dhu.edu.cn/problem/view.html?problemId=5272 题意: 给定n瓶不同浓度的液体, 每次可以挑选x(x>=2)瓶混合, 求最后 ...
- [java基础原理] BigDecimal
1.类 简化示例 属于java.math包,因此包含各种数学运算,abs,pow等等. package java.math; public class BigDecimal { //值的绝对long型 ...
- Webdriver概述(selenium对应浏览器版本)
Webdriver (Selenium2)是一种用于Web应用程序的自动测试工具,它提供了一套友好的API,与Selenium 1(Selenium-RC)相比,Webdriver 的API更容易理解 ...
- 编程数学-∑(求和符号)-Sigma
百度百科:∑ 在数学中,我们把它作为求和符号使用. 大写Σ用于数学上的总和符号,比如:∑Pi,其中i=1,2,...,T,即为求P1 + P2 + ... + PT的和.小写σ用于统计学上的标准差.西 ...
- CF676E:The Last Fight Between Human and AI
人类和电脑在一个多项式上进行博弈,多项式的最高次项已知,一开始系数都不确定.电脑先开始操作,每次操作可以确定某次项的系数,这个系数可以是任意实数.给出一个博弈中间状态,最后如果这个多项式被x-K整除就 ...
- 无法打开物理文件 "X.mdf"。操作系统错误 5:"5(拒绝访问。)"。 (Microsoft SQL Server,错误: 5120)解决
环境 SQLServer 2008 R2 问题 附加数据库出现“无法打开物理文件 "X.mdf".操作系统错误 5:"5(拒绝访问.)". (Microsoft ...
- Test for Job 图上的动态规划(DAG)
Test for Job Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 11399 Accepted: 2697 Des ...
- Ajax核心知识(2)
对于Ajax核心的东西需要在进行总结提炼一下: xmlHttp对象. 方法:xml.responseText获取后台传递到前台的数据,经常性的使用var object=xml.responseText ...