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

隨筆 - 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 英雄哪里出來 閱讀(1457) 評論(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>
            91久久精品国产91性色tv| 久久经典综合| 亚洲精品久久久久久下一站 | 久久中文欧美| 久久久久久久97| 亚洲国产成人av| 亚洲国产精品精华液网站| 欧美日韩亚洲一区二区三区| 亚洲欧美另类久久久精品2019| 一区二区久久久久| 欧美日韩中文字幕综合视频| 亚洲午夜视频在线观看| 亚洲一区二区三区成人在线视频精品| 欧美午夜性色大片在线观看| 欧美在线视频不卡| 六月婷婷一区| 亚洲夜晚福利在线观看| 亚洲欧美激情一区二区| 伊人精品久久久久7777| 99re66热这里只有精品3直播| 国产精品美女视频网站| 久久人人爽人人爽爽久久| 欧美激情二区三区| 欧美与黑人午夜性猛交久久久| 久久国产日韩欧美| 亚洲一二三区精品| 久久成人免费| 亚洲在线视频一区| 免费成人网www| 欧美一区二粉嫩精品国产一线天| 欧美成人dvd在线视频| 亚洲性xxxx| 久久综合五月| 欧美专区在线播放| 欧美韩日一区| 免费黄网站欧美| 国产农村妇女精品一二区| 亚洲国产三级| 一区在线观看| 性久久久久久久久久久久| 这里只有精品丝袜| 毛片基地黄久久久久久天堂| 性感少妇一区| 欧美亚洲成人免费| 亚洲高清三级视频| 激情综合色综合久久| 亚洲一区二区三区午夜| 99视频一区二区| 欧美va天堂| 欧美成人精品激情在线观看| 国产午夜亚洲精品理论片色戒| 亚洲老司机av| 99视频一区| 欧美日韩国产免费观看| 欧美电影专区| 亚洲国产日日夜夜| 免费观看日韩av| 欧美国产日本| 亚洲黄色免费网站| 欧美激情欧美激情在线五月| 欧美黄色免费网站| 亚洲电影在线观看| 久久永久免费| 91久久夜色精品国产九色| 亚洲片在线资源| 欧美精品999| 亚洲精品视频在线看| 9久草视频在线视频精品| 欧美片在线播放| 99视频国产精品免费观看| 99精品99| 欧美午夜欧美| 亚洲资源在线观看| 久久精品论坛| 激情六月婷婷久久| 免费在线一区二区| 亚洲精品国产精品久久清纯直播 | 亚洲欧美日韩国产成人| 欧美日韩亚洲综合在线| 亚洲天堂第二页| 欧美在线视频免费播放| 狠狠色狠狠色综合日日五| 美女网站在线免费欧美精品| 亚洲欧洲一区二区三区在线观看| 日韩亚洲精品在线| 国产精品乱子乱xxxx| 亚洲欧美日韩国产一区| 老**午夜毛片一区二区三区| 亚洲精品国产系列| 欧美性大战久久久久久久蜜臀 | 久久永久免费| 亚洲麻豆视频| 国产欧美日韩另类视频免费观看| 久久人人看视频| 日韩视频免费| 美女成人午夜| 午夜日韩av| 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美成人日韩| 亚洲欧美日韩精品| 亚洲精品乱码久久久久久按摩观| 亚洲尤物精选| 亚洲激情视频| 国产一区二三区| 欧美日韩免费在线视频| 欧美综合激情网| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 麻豆免费精品视频| 亚洲天堂免费在线观看视频| 美国三级日本三级久久99| 一本色道久久88亚洲综合88| 国内精品久久久久久久影视蜜臀| 久久久久九九九九| 99精品国产在热久久下载| 免费欧美日韩| 久久精品一区二区三区不卡| 在线亚洲欧美| 亚洲第一在线视频| 国产日韩成人精品| 欧美少妇一区| 麻豆久久久9性大片| 欧美在线综合| 亚洲中字黄色| 一区二区三区毛片| 91久久久久| 亚洲福利在线视频| 欧美1区2区3区| 久久婷婷久久| 久久婷婷国产综合国色天香| 欧美亚洲在线观看| 亚洲欧美影音先锋| 国产精品99久久99久久久二8 | 久久在线视频| 久久综合九色九九| 久久久久久日产精品| 亚洲欧美综合国产精品一区| 99精品视频一区二区三区| 亚洲高清免费在线| 亚洲黄色影片| 亚洲精品1234| 亚洲理论电影网| 在线观看91久久久久久| 亚洲精品一区在线观看香蕉| 欧美激情视频在线播放| 欧美成人乱码一区二区三区| 麻豆精品一区二区综合av| 久久久亚洲成人| 欧美成va人片在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 麻豆精品国产91久久久久久| 鲁大师成人一区二区三区| 亚洲第一精品福利| 亚洲电影在线免费观看| 亚洲欧洲日本国产| 99香蕉国产精品偷在线观看| 一区二区av| 羞羞视频在线观看欧美| 久久九九国产精品| 欧美96在线丨欧| 欧美四级剧情无删版影片| 国产精品免费一区二区三区观看| 国产噜噜噜噜噜久久久久久久久| 国产日韩欧美另类| 精品福利av| 一区二区三区高清不卡| 午夜国产精品视频免费体验区| 久久精品日韩一区二区三区| 蜜桃av一区| 一区二区三区视频在线观看 | 久久免费99精品久久久久久| 男人插女人欧美| 一区二区电影免费观看| 欧美影视一区| 欧美激情一区二区三区| 国产精品日韩精品欧美在线| 伊人久久婷婷色综合98网| 一卡二卡3卡四卡高清精品视频| 欧美一二三视频| 欧美国产日韩免费| 亚洲欧美成人| 欧美精品一区二区三区在线播放 | 亚洲国产导航| 亚洲视频欧美在线| 免费观看30秒视频久久| 在线午夜精品自拍| 久久综合伊人77777尤物| 欧美调教vk| 亚洲精品久久久久中文字幕欢迎你 | 蜜臀va亚洲va欧美va天堂| 欧美日韩一卡二卡| 在线观看91精品国产入口| 亚洲免费一在线| 欧美mv日韩mv亚洲| 亚洲综合首页| 美女国产一区| 黑人巨大精品欧美黑白配亚洲| 亚洲在线免费| 亚洲久色影视| 欧美成人性生活| 激情国产一区二区|