题目描述

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

输入格式

输入仅一行包含一个正整数 n nn ,为已知的数据。以下 n nn 行每行两个整数 yi y_iy​i​​ 和 ri r_ir​i​​ ,为年份和降雨量,按照年份从小到大排列,即 yi<yi+1 y_i \lt y_{i+1}y​i​​<y​i+1​​ 。下一行包含一个正整数 m mm ,为询问的次数。以下 m mm 行每行包含两个数 Y YY 和 X XX ,即询问“ X XX 年是自 Y YY 年以来降雨量最多的。”这句话是必真、必假还是“有可能”。

输出格式

对于每一个询问,输出 true , false 或者 maybe 。

样例

样例输入 1

6
2002 4920
2003 5901
2004 2832
2005 3890
2007 5609
2008 3024
5
2002 2005
2003 2005
2002 2007
2003 2007
2005 2008

样例输出 1

false
true
false
maybe
false

数据范围与提示

对于 100%100\%100% 的数据, 1≤n≤50000,1≤m≤10000,−109≤yi≤109,1≤ri≤109 1 \le n \le 50000, 1 \le m \le 10000, -10^9 \le y_i \le 10^9, 1 \le r_i \le 10^91≤n≤50000,1≤m≤10000,−10​9​​≤y​i​​≤10​9​​,1≤r​i​​≤10​9​​


这是一段扯淡,不想看的直接往下翻

这是Lv神考试的T2,考场上只知道写一个St表,但是数据范围看错了,下标直接用了年份,里面的判断也写得狗屁不通,然后被卡爆了。

靠后本着一定要学会的精神开始调,看了个超短的题解,学会了怎么用lower_bound,然后瞎搞一波就能过,然后就开开心心的写了一发

……

然后就成功的WA了三个点,RE了七个点,调了一下午也没调出来(一起的学弟昨天就切了)

厚着脸皮去问了他们,被告知了一个一样的方法,然后心态就很爆炸

可能是他们的思想太过高深,我太菜了,见着自己的新思路重写了一个

下了数据后跑了发对拍,发现错的乱七八糟的

然后用了二十分钟重构了代码,对着数据和标程拍了一会儿

过了五个点,还是最大的数据,心想应该是小数据hack了

时间已经过了一个下午,去食堂随便吃了顿饭(还和大佬打了快乐篮球)

回来继续调,加了一个判断条件,六十分,然后找了F姓dalao帮忙,

大佬一口咬定是我写的太丑了(我也是这么想的QAQ)

然后dalao在期间郑重向我表明我的某行代码不是错的,

经过了半个小时的懵逼,我们把刚才说的那行代码改了,然后就A了,后来才知道是出现了重复状态

dalao已经在豆腐上撞死了,我发现自己被安排的明明白白的。


下面是正经的题解
我们发现这道题如果没有maybe这个状态就是个St表的裸题,然后只要判断是否正确,
但是加了之后我们也不用慌,只需要分讨论
我们已知true只有一种判断方法,那就是前后两个段点存在,中间没有不存在的点,中间所有点的值严格小于后面的点的值,后端点<=前端点
而maybe的可能性就比较多了
(1)当前后两个都没有时
(2)当前面有,后面没有
(3)后面有,前面没有
(4)前后都有,但是中间有空缺
而false只用在开头判断后端点的年份是否严格大于前端点,其余的在最后输出就可以了(因为已经判断完了false的)
下面给出代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
using namespace std;
inline int rd()
{int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';return x*f;
}
void write(int x)
{if(x<0) putchar('-'),x=-x;if(x>9) write(x/10);putchar(x%10+'0');return ;
}
int lg[300006],f[300006][26],a[300006];
int s[300006];
int sum[300006];
int n,m;
int check(int x,int y){if(y<x) return 1<<30;int hh=lg[y-x+1];int maxn=max(f[x][hh],f[y-(1<<hh)+1][hh]);return maxn;
}
int main()
{//freopen("hh.out","w",stdout);n=rd();lg[0]=-1;sum[1]=0;for(int i=1;i<=n;i++){s[i]=rd();a[i]=rd();f[i][0]=a[i];lg[i]=lg[i>>1]+1;}for(int j=1;j<=25;j++) for(int i=1;i+(1<<j-1)<=n;i++) f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);m=rd();for(int i=1;i<=m;i++){int x=rd(),y=rd();//cout<<i<<" "; if(y<=x){//后面的年份小,明显不符合 printf("false\n");continue;}int h1=lower_bound(s+1,s+n+1,x)-s;int h2=lower_bound(s+1,s+n+1,y)-s;if(s[h1]!=x&&s[h2]!=y){//两个年份都没有 printf("maybe\n");continue;}if((s[h2]!=y&&s[h1]==x&&(check(h1+1,h2-1)<a[h1]||h1+1==h2))){/*前面的有但是后面的没有,必定不为true 这时需要判断中间值是否严格小于前端点是的话为maybe否则为false 还要特判h1和h2是否相邻 (下标一定要注意) */ printf("maybe\n");continue;}if((s[h1]!=x&&s[h2]==y&&(check(h1,h2-1)<a[h2]||h1==h2))){/*后面的有前面的没有,判断中间值是否严格小于后端点 特判两个点是否为同一个下标 */ printf("maybe\n");continue;}if(s[h1]==x&&s[h2]==y){//前后点都有 //cout<<h1<<" "<<h2;if(h1+1==h2&&a[h2]<=a[h1]){//如果相邻就特判 if(h2-h1==y-x){//没有空缺 printf("true\n");continue;}if(h2-h1!=y-x){//有空缺 printf("maybe\n");continue;}}if(check(h1+1,h2-1)<a[h1]&&check(h1+1,h2-1)<a[h2]&&a[h2]<=a[h1]){//满足中间值小于后端点,后端点小于等于前端点 if(y-x>h2-h1){//没有空缺 printf("maybe\n");continue;}if(y-x==h2-h1){//有空缺 printf("true\n");continue;}}}printf("false\n");//在其他的判玩后剩下的一定都是false
    }return 0;
}

转载于:https://www.cnblogs.com/WWHHTT/p/9676517.html

降雨量(附我的SB调题过程)相关推荐

  1. oracle避免回表,请教大家: 经常在sql调优过程中提到避免“回表”,具体是指什么意思???3Q...

    你的位置: 问答吧 -> Oracle -> 问题详情 请教大家: 经常在sql调优过程中提到避免"回表",具体是指什么意思???3Q 如题,不甚感激!!!! [ 本帖 ...

  2. 2021华为软件精英挑战赛(附赠线下判题器链接)——经历

    2021华为软件精英挑战赛(附赠线下判题器链接)--经历 1.题目解析 本次赛题源自现实的互联网企业面临的问题,怎样购买与部署服务器最便宜! 服务器:不相同型号的服务器有着不同的CPU与不同的内存,每 ...

  3. html5调用系统声音1s响一次_记录一次系统性能调优过程

    在线上环境,由于业务场景需要,要求程序能够在普通的4G机器中依然正常运行. 而原来的环境配置为8核16G,微服务部署,一共有6个功能模块. 而现在要求在一台4核4G的设备上正常运行. 问题清单 模块合 ...

  4. 对永磁无刷电机的调速过程

        考虑了一下对永磁无刷电机的调速过程.     一般把使用永磁转子.无电刷的电机,根据驱动方式分为永磁同步与直流无刷.其实没有本质区别.在此称为永磁无刷.     用永磁无刷电机的分子泵驱动器一 ...

  5. 2023年五一数学建模 B 题过程与结果

    文章目录 第一问 第二问 数据时序分析 Auto-ARIMA 第二问求解 解的情况 A->Q: D-> A Q-V 总快递数 第三问 第四问 遗传算法求解 第五问 X-11 分解 趋势:采 ...

  6. 压力机测试软件,一个典型的测试压力机的性能调优过程

    原标题:一个典型的测试压力机的性能调优过程 性能测试过程中,不仅仅是对被测系统的性能问题定位.分析.优化,很多时候负责批量请求发起的压力机也存在各类性能瓶颈.毕竟用几千块钱的机器就想把几个亿的机器压瘫 ...

  7. XGBRegressor参数详解以及调参过程

    XGBRegressor参数详解以及调参过程 一.参数 1.通用参数booster.nthread 2.学习目标参数 (1)objective (2)eval_metric (3)seed 3.Tre ...

  8. 2021第十二届蓝桥杯B组省赛C/C++做题过程与反思

    2021第十二届蓝桥杯B组省赛C/C++做题过程与反思 ​ 鄙人大一,第一次有幸参加蓝桥杯b组c.以下是本人的做题全过程,注意了!!!!不一定是正确答案!! 如果有误,还请大佬们指点指点. 试题 A: ...

  9. 一份超详细的IBM公司JAVA基础面试题附答案以及解析(题库)

    第一章 Java概述 笔试题 一.填空题 1.[基础题]Java是一种先 编译 后 解释 运行的语言. 二.选择题 三.名词解释 1.[基础题]J2SE:Java 2 Standard Edition ...

最新文章

  1. 写入和读取图片(c# asp.net sqlserver)
  2. FSWD_1_BasicHtmlCss
  3. 一步一步学Linq to sql(六):探究特性
  4. 数据库面试题【十五、优化查询过程中的数据访问】
  5. server2008r2/2012R2遠程桌面-企业协议号
  6. 网友爆料乘顺风车被司机拿刀砍伤:或面临截肢危险...
  7. c++ const
  8. Java元组类型之javatuples
  9. sp_help 查看表结构 alter column修改字段长度
  10. 实用的Portraiture滤镜磨皮教程
  11. ORBSLAM2在ubuntu20.04上运行,实时单目摄像头(适用高版本的PCL,OpenCV4.2.0等)
  12. log日志java web_Java Web log4j (日志)
  13. 采购需要进步,采购一定要知道的事
  14. matplotlib如何绘制圆
  15. 前端封装WebSocket
  16. 万年历(c语言)编程,C语言实现的万年历
  17. 常州abb机器人编程_ABB机器人编程程序解析
  18. PDF生成插件--TcPDF
  19. 使用java编写周易卦象生成器
  20. 【MySQL】 一张表最多支持多少个索引?

热门文章

  1. DSP一个程序如何实现RAM和Flash两种下载方式,CCS9
  2. 0-1背包问题及python实现
  3. Tomcat7之性能优化
  4. Java生成随机数并随机输出不重复的值
  5. MFC——CPropertySheet(属性表单)和CPropertyPage(属性页)——实现分页显示
  6. MFC中CPropertySheet与CTabCtrl的使用
  7. matlab 使用定时器画连续正弦波信号
  8. 【机器学习】27种确定性预测评估指标及其Python实现
  9. 从mxnet的rec文件中恢复jpg格式
  10. pycharm运行os.system出现�����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���