zoukankan      html  css  js  c++  java
  • 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 点此展开 

     
     

    题解:

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

    我们来考虑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;
    }
     
  • 相关阅读:
    技术领导要不要写代码?
    资深程序员告诉你:如何用五年时间攒够100万?
    mfc基于对话框的应用程序,如何设置初始对话框大小,移动控件位置
    zend studio,操作记录
    xampp怎么操作数据库mysql
    mysql-font的理解
    delphi 中配置文件的使用(*.ini)和TIniFile 用法
    delphi 创建服务,安装与卸载服务
    sublime Text的一些用法(emmet插件、)
    apache (web服务器) ->php->mysql,xampp与wamp比较,WAMP与WNMP有什么区别
  • 原文地址:https://www.cnblogs.com/shenben/p/5762469.html
Copyright © 2011-2022 走看看