2439 降雨量

2439 降雨量

2007年省队选拔赛四川

时间限制: 1 s

空间限制: 64000 KB

题目等级 : 大师 Master

题解

查看运行结果

题目描述 Description

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

输入描述 Input Description

输入仅一行包含一个正整数n,为已知的数据。以下n行每行两个整数yiri,为年份和降雨量,按照年份从小到大排列,即yi<yi+1。下一行包含一个正整数m,为询问的次数。以下m行每行包含两个数Y和X,即询问“X年是自Y年以来降雨量最多的。”这句话是必真、必假还是“有可能”。

输出描述 Output Description

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

样例输入 Sample Input

6

2002 4920

2003 5901

2004 2832

2005 3890

2007 5609

2008 3024

5

2002 2005

2003 2005

2002 2007

2003 2007

2005 2008

样例输出 Sample Output

false

true

false

maybe

false

数据范围及提示 Data Size & Hint

100%的数据满足:1<=n<=50000, 1<=m<=10000, -109<=yi<=109, 1<=ri<=109

分类标签 Tags 点此展开

四川 省队选拔赛 2007年

题解:

(狗血的判断,比着别人的拍出来了)

我们来考虑true的情况【x年到y年】:

  1. x已知并且y已知
  2. y年降水量不超过x年
  3. x+1到y-1年已知并且都小于y年降水量

然后是maybe的情况【x年到y年】:

  1. x已知并且y已知
  2. y年降水量不超过x年
  3. x+1到y-1年至少有一年未知并且已知的都小于y年降水量

  1. x已知或y已知
  2. 若x已知,那么x+1到y年至少有一年未知并且已知的都小于x年降水量
  3. 若y已知,那么x到y-1年至少有一年未知并且已知的都小于y年降水量

最后是false的情况,如果不是以上两种情况,就是false

AC代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 100010
int n,a[N],w[N],f[N][25];
inline const int read(){
    register int x=0,f=1;
    register char ch=getchar();
    while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
inline void RMQ(){
    for(int j=1;j<=20;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]);
        }
    }
}
inline int query(int i,int j){
    if(i>j) return -2000000000;
    int k=log(j-i+1)/log(2);
    return max(f[i][k],f[j-(1<<k)+1][k]);
}
int main(){
    n=read();
    for(int i=1;i<=n;i++) a[i]=read(),f[i][0]=w[i]=read();
    RMQ();
    int maxx,l,r,x,y,ans,T=read();
    while(T--){
        x=read();y=read();
        l=lower_bound(a+1,a+n+1,x)-a;
        r=lower_bound(a+1,a+n+1,y)-a;
        if(l<=n&&a[l]==x){
            if(r<=n&&a[r]==y){
                maxx=query(l+1,r-1);
                if(w[l]<w[r]) ans=0;
                else if(maxx<w[r]){
                    if(r-l==y-x) ans=1;
                    else ans=-1;
                }
                else ans=0;
            }
            else{
                maxx=query(l+1,r-1);
                if(maxx<w[l]) ans=-1;
                else ans=0;
            }
        }
        else{
            if(r<=n&&a[r]==y){
                maxx=query(l,r-1);
                if(maxx<w[r]) ans=-1;
                else ans=0;
            }
            else ans=-1;
        }
        if(ans==1) puts("true");
        else if(ans==-1) puts("maybe");
        else puts("false");
    }
    return 0;
}
时间: 2025-01-07 09:59:02

2439 降雨量的相关文章

C++之路进阶——ST表(降雨量)

2439 降雨量 2007年省队选拔赛四川 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说“2005年是自2003年以来最多的”,但不能说“2005年是自2002年以来最多的”由于有

BZOJ1067: [SCOI2007]降雨量

1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4185  Solved: 1119[Submit][Status][Discuss] Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说“200

【BZOJ1067】【POJ2637】降雨量

1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3004  Solved: 767[Submit][Status][Discuss] Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说“2005

1067: [SCOI2007]降雨量

1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2148  Solved: 554[Submit][Status] Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说“2005年是自2003年以

[BZOJ 1067][SCOI2007]降雨量

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1067 题解: 咳咳.这次因为遇到了一些比较有成就感的事情所以来发博. 听说这题要用线段树??开玩笑.当然不. 首先我们想想,如果我们知道了X年份的降雨量的时候,向前找已知降雨量比X大或等于的第一个年份(我们设为Z1),如果Y年份比Z1小则Y到X这个区间一定包含Z1,那么此命题为FALSE;如果我们知道Y年份降雨量,则向后找已知降雨量大于或等于Y的第一个年份Z2,如果X>Z2那么Y到X这个区间

BZOJ 1067 降雨量(RMQ+有毒的分类讨论)

1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4399  Solved: 1182 [Submit][Status][Discuss] Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890, 则可以说

bzoj 1067: [SCOI2007]降雨量 模擬

1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2010  Solved: 503[Submit][Status] Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说“2005年是自2003年以

【BZOJ 1067】 [SCOI2007]降雨量

1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2211  Solved: 571 [Submit][Status] Description 我们常常会说这样的话:"X年是自Y年以来降雨量最多的".它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说&q

HDU 2439 The Mussels

The Mussels Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 243964-bit integer IO format: %I64d      Java class name: Main "To be or not to be, that is the question." Now FJ( Frank&John) faces a seri