青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 97, 文章 - 22, 評論 - 81, 引用 - 0
數據加載中……

PKU 2637 WorstWeather Ever

題目鏈接:http://poj.org/problem?id=2637

/*
題意:
    給定N(N <= 50000)條信息,表示第yi年的降水量是ri,然后給出M(M <= 10000)
條詢問,每條詢問的格式是Y X,表示自從第Y年以來X這一年是最大的降水量,問這句
話正確與否。
    正確的判斷條件是:
1.Y到X這些年的所有年份的降水量已知。
2.Y的降水量 >= X的降水量。
3.對于每個Z,Y < Z < X,Z的降水量小于X的降水量。
    可能正確的判斷條件是:
其中有一年的降水量不知道。
    錯誤的判斷條件是:
其他情況。

題解:
    二分 + 線段樹(區間最值)

思路:
    邏輯強題。首先記錄下每個信息所在的連續塊,如果兩個信息的連續塊相同,說明
它們之間的年份全部連續。年份的查找可以采用二分查找,然后就是分情況討論了,對、
輸入的兩個年份Y和X,利用二分查找找到最大的小于等于給定年份的那條記錄fY和fX。

一.如果兩者查到的記錄都在輸入數據中出現過,然后判斷他們是不是屬于一個連續的塊,
只需要下標索引即可,然后是兩種情況:
    1. 如果屬于同一個連續塊,說明中間的年份全部出現過,然后利用線段樹查找fY的
年份的最大降水量Yr,[fY+1, fX-1]的最大降水量Zr和fX的最大降水量Xr,如果滿足以下
條件:(Yr >= Xr && Zr < Xr)則說明條件屬實,是true的情況,否則則是false。
    2.如果不屬于同一個連續塊,說明中間的年份不是全部出現過,然后利用線段樹查找
fY的年份的最大降水量Yr,[fY+1, fX-1]的最大降水量Zr和fX的最大降水量Xr,如果滿足
以下條件:(Yr >= Xr && Zr < Xr)則說明當前條件屬實,但是也有可能沒出現過的記錄
破壞這個條件,所以是maybe的情況,否則則是false。

二.如果X能夠查到,則利用線段樹查找[fY+1, fX-1]的最大降水量Zr和fX的最大降水量Xr
,如果滿足以下條件:Zr < Xr則說明條件有可能屬實,是maybe的情況,否則則是false。

三.如果Y能查到,這個條件就比較隱秘了,因為需要滿足(Yr >= Xr && Zr < Xr),而Zr
和Xr無從得知,但是我們可以知道Yr >= Xr > Zr,于是只要判斷當前的Zr是否小于Yr。
如果成立,則是maybe,否則就是false。

四.最后一種情況就是X和Y的年份在先前的數據中都沒有出現過,這肯定是maybe的情況。

*/

#include 
<iostream>

using namespace std;

#define maxn 50010

int n, m;

struct point {
    
int year, r;
}
pt[maxn];

struct Tree {
    
int Max;
    
int l, r;
}
T[maxn*4];

int MMax(int a, int b) {
    
return a > b ? a : b;
}


void Build(int p, int l, int r) {
    T[p].l 
= l;
    T[p].r 
= r;
    
if(l == r) {
        T[p].Max 
= pt[l].r;
        
return ;
    }

    
int mid = (l + r) >> 1;
    Build(p
<<1, l, mid);
    Build(p
<<1|1, mid+1, r);
    T[p].Max 
= MMax(T[p<<1].Max, T[p<<1|1].Max);
}


int Query(int p, int l, int r) {
    
if(r < T[p].l || l > T[p].r)
        
return 0;
    
if(l <= T[p].l && T[p].r <= r) 
        
return T[p].Max;
    
return MMax(Query(p<<1, l, r), Query(p<<1|1, l, r));
}


int Binary(int val, int l, int r) {
    
int ans = 0;
    
while(l <= r) {
        
int m = (l + r) >> 1;
        
if(pt[m].year <= val) {
            l 
= m + 1;
            ans 
= m;
        }
else
            r 
= m - 1;
    }

    
return ans;
}


// 連續的塊種類
int Coces[maxn];

int main() {
    
int i;
    
int t = 0;

    
while(scanf("%d"&n) != EOF) {

        
if(t++ && n) {
            puts(
"");
        }

        
for(i = 1; i <= n; i++{
            scanf(
"%d %d"&pt[i].year, &pt[i].r);
            
if(i == 1{
                Coces[i] 
= 1;
            }
else {
                
if(pt[i].year - pt[i-1].year == 1)
                    Coces[i] 
= Coces[i-1];
                
else
                    Coces[i] 
= Coces[i-1+ 1;
            }

        }

        
if(n)
            Build(
11, n);

        scanf(
"%d"&m);
        
int bufM = m;

        
while(bufM--{
            
int Y, X;
            
int ans; // 0 true 1 maybe 2 false
            scanf("%d %d"&Y, &X);
            
int fY = Binary(Y, 1, n);
            
int fX = Binary(X, 1, n);

            
if(pt[fY].year == Y && pt[fX].year == X) {        
                
// 都能找到數據中有的年份

                
int Yr = Query(1, fY, fY);
                
int Zr = Query(1, fY+1, fX-1);
                
// Y+1 == X 的情況在這里Zr返回的是0,所以肯定滿足
                int Xr = Query(1, fX, fX);

                
if(Coces[fY] == Coces[fX]) {
                    
// 之間的年份全部連續
                    if(Yr >= Xr && Zr < Xr) {
                        ans 
= 0;
                    }
else
                        ans 
= 2;
                }
else {
                    
// 之間的年份不連續
                    if(Yr >= Xr && Zr < Xr) {
                        ans 
= 1;
                    }
else
                        ans 
= 2;
                }

            }
else if(pt[fX].year == X) {
                
// X這一年數據中有
                if(Y + 1 == X) {
                    
// 當前兩年連續
                    ans = 1;
                }
else {
                    
int Zr = Query(1, fY+1, fX-1);
                    
int Xr = Query(1, fX, fX);
                    
if(Zr < Xr)
                        ans 
= 1;
                    
else
                        ans 
= 2;
                }

            }
else if(pt[fY].year == Y) {
                
int Yr = Query(1, fY, fY);
                
int Zr = Query(1, fY+1, fX);
                
if(Yr > Zr) {
                    ans 
= 1;
                }
else
                    ans 
= 2;
            }
else {
                
// X 和 Y 都沒有出現,肯定是maybe
                ans = 1;
            }


            
if(!ans)
                puts(
"true");
            
else if(ans == 1)
                puts(
"maybe");
            
else
                puts(
"false");
        }


        
if(!&& !m) {
            
break;
        }

    }

    
return 0;
}

/*
4
2002 4920
2003 5901
2004 2832
2005 3890
2
2002 2005
2003 2005
3
1985 5782
1995 3048
2005 4890
2
1985 2005
2005 2015
*/

posted on 2011-04-09 14:00 英雄哪里出來 閱讀(1473) 評論(0)  編輯 收藏 引用 所屬分類: 線段樹

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99re视频这里只有精品| 好看的日韩av电影| 欧美一级午夜免费电影| 欧美日韩国产综合一区二区| 亚洲精品孕妇| 一区二区成人精品| 国产精品一区2区| 久久国产精品亚洲va麻豆| 久久国产乱子精品免费女| 亚洲承认在线| 亚洲精品久久久久| 欧美精品91| 午夜精品福利在线| 久久久7777| 一本色道久久综合| 亚洲免费视频成人| 亚洲成人资源| 99视频精品全部免费在线| 国产伦精品一区二区三区免费| 久久免费黄色| 欧美成人乱码一区二区三区| 亚洲综合三区| 久久精品在这里| 夜夜嗨av一区二区三区四季av | 蜜桃av噜噜一区| 欧美大片免费观看在线观看网站推荐| 亚洲网站在线观看| 欧美专区在线| 一区二区高清视频在线观看| 小嫩嫩精品导航| 亚洲精品国产日韩| 亚洲综合视频1区| 亚洲人成网在线播放| 9国产精品视频| 伊人久久男人天堂| 在线视频免费在线观看一区二区| 国产一区二区三区四区五区美女 | 亚洲黄色三级| 亚洲视频高清| 亚洲国产成人高清精品| 亚洲视频观看| 91久久精品国产91久久| 亚洲女人天堂成人av在线| 亚洲人成网站999久久久综合| 亚洲制服av| 亚洲美女电影在线| 欧美亚洲视频| 日韩一区二区免费看| 久久成人在线| 亚洲资源在线观看| 欧美aⅴ一区二区三区视频| 欧美在线在线| 欧美日韩国产成人高清视频| 久久午夜视频| 国产精品社区| 亚洲精品国产精品乱码不99 | 欧美日韩1区2区| 久久午夜精品一区二区| 欧美性大战久久久久久久| 欧美国产在线视频| 国产精品午夜电影| 亚洲免费精品| 亚洲人成亚洲人成在线观看图片 | 国产三区二区一区久久| 亚洲精品一二三| 一区二区三区亚洲| 午夜精品福利视频| 亚洲午夜精品视频| 欧美国产视频在线| 美女视频黄a大片欧美| 国产精品一区视频| 一片黄亚洲嫩模| 99国产精品99久久久久久粉嫩| 久久精品中文字幕一区| 欧美一区二区高清在线观看| 欧美日韩理论| 91久久亚洲| 亚洲第一网站| 久久精品二区亚洲w码| 西西人体一区二区| 欧美日韩国产麻豆| 亚洲国产高清一区| 在线日韩视频| 久久久999国产| 久久久久久久久久看片| 国产欧美在线| 亚洲欧美一区二区三区极速播放 | 麻豆av一区二区三区| 久久天堂国产精品| 国产日韩精品一区二区三区| 99re6这里只有精品| av成人黄色| 欧美伦理91| 亚洲精品久久视频| 亚洲美女啪啪| 欧美金8天国| 亚洲福利视频网| 亚洲精品久久久蜜桃| 免费成人av在线看| 欧美成人精精品一区二区频| 1024国产精品| 蜜桃久久av一区| 欧美国产精品日韩| 亚洲欧洲日韩综合二区| 牛牛影视久久网| 亚洲国产精品www| 亚洲精品乱码久久久久久| 欧美不卡视频| 亚洲经典三级| 在线视频欧美精品| 欧美视频在线观看免费| 一区二区三区精品视频| 午夜精品999| 国产欧美日韩视频在线观看| 国产日本欧美一区二区三区| 亚洲一二三四久久| 性欧美办公室18xxxxhd| 国产欧美午夜| 久久精品国产2020观看福利| 美女脱光内衣内裤视频久久影院 | 久久久精品网| 欧美高清视频免费观看| 亚洲欧洲在线观看| 欧美精品v日韩精品v韩国精品v| 亚洲精品一品区二品区三品区| 亚洲小说春色综合另类电影| 国产精品久久| 欧美一区二区三区喷汁尤物| 鲁鲁狠狠狠7777一区二区| 亚洲国产片色| 欧美另类69精品久久久久9999| 99亚洲视频| 欧美在线欧美在线| 一区二区三区在线观看视频| 免费在线成人av| 亚洲免费电影在线观看| 欧美一级欧美一级在线播放| 黄色av成人| 欧美高清日韩| 亚洲午夜高清视频| 久久久7777| 亚洲三级影院| 国产精品毛片va一区二区三区| 欧美一区二区视频网站| 欧美激情精品久久久久久蜜臀| 一卡二卡3卡四卡高清精品视频| 国产精品日本精品| 久久久久久欧美| 亚洲裸体视频| 久久精品国产免费观看| 亚洲经典在线看| 国产精品国产自产拍高清av| 久久福利精品| 亚洲人体大胆视频| 欧美专区日韩专区| 亚洲人成小说网站色在线| 国产精品你懂的在线欣赏| 久久久噜噜噜久久人人看| 亚洲日本中文字幕区| 欧美一级一区| 亚洲人成7777| 国产欧美精品在线播放| 欧美成在线观看| 亚洲欧美激情精品一区二区| 欧美福利网址| 欧美亚洲尤物久久| 亚洲精品国产精品乱码不99按摩| 国产精品日本| 欧美国产在线电影| 性感少妇一区| 亚洲美女精品一区| 久久日韩精品| 亚洲一区二区三区免费观看| 在线观看欧美日韩| 国产精品福利影院| 免费中文字幕日韩欧美| 亚洲欧美国产毛片在线| 亚洲国产成人久久综合| 久久精品国产亚洲一区二区| 亚洲美女啪啪| 在线不卡免费欧美| 国产精品高潮呻吟视频| 蜜桃伊人久久| 午夜精品久久一牛影视| 亚洲高清激情| 国产婷婷成人久久av免费高清 | 久久中文在线| 亚洲综合社区| 日韩小视频在线观看| 你懂的国产精品永久在线| 欧美一区二区日韩| 99re视频这里只有精品| 精品1区2区3区4区| 国产精品三级视频| 欧美日韩免费观看中文| 久久裸体视频| 欧美一区二区三区免费观看| 一区二区高清视频| 亚洲片国产一区一级在线观看| 久久久一二三|