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

隨筆 - 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久久一区二区| 亚洲精选视频免费看| 一区二区三区高清在线观看| 亚洲视频在线一区| 久久精品免费| 欧美破处大片在线视频| 国产精品美女久久久久久免费| 在线观看亚洲| 99re66热这里只有精品3直播| 久久亚洲高清| 麻豆91精品91久久久的内涵| 欧美激情在线狂野欧美精品| 国产精品美女视频网站| 亚洲国产成人久久综合| 亚洲欧美日韩在线综合| 麻豆精品精品国产自在97香蕉| 亚洲一区二区三区高清| 亚洲欧美日韩精品久久久久| 美女91精品| 亚洲深夜福利在线| 欧美激情1区2区3区| 国产精品综合av一区二区国产馆| 欧美一区视频| 欧美国产精品久久| 国产精一区二区三区| 亚洲国产专区校园欧美| 午夜激情综合网| 亚洲精品欧美日韩专区| 久久成人免费电影| 国产精品久久久久久久久久尿 | 欧美插天视频在线播放| 亚洲精品视频免费| 快射av在线播放一区| 国产精品视频免费观看| 亚洲国产日韩欧美在线动漫| 香蕉免费一区二区三区在线观看| 亚洲图片欧美午夜| 欧美成人乱码一区二区三区| 午夜精品在线看| 欧美日韩一区二| 亚洲国产经典视频| 麻豆国产va免费精品高清在线| 久久青青草综合| 在线亚洲一区二区| 欧美日韩亚洲91| 日韩午夜激情av| 亚洲国产精品嫩草影院| 美女91精品| 狠狠色香婷婷久久亚洲精品| 性欧美1819性猛交| 亚洲免费人成在线视频观看| 欧美三级视频在线播放| 一本久道综合久久精品| 亚洲激情综合| 欧美精品免费视频| 一本大道久久精品懂色aⅴ| 日韩视频一区二区| 国产精品大片| 欧美一级二级三级蜜桃| 欧美亚洲一区二区在线观看| 国产欧美婷婷中文| 久久久精彩视频| 久久蜜桃精品| 亚洲精品国产精品乱码不99| 亚洲经典在线看| 欧美日韩一区二区三区在线看 | 亚洲精品乱码| 欧美激情第9页| 欧美日韩国产在线| 一区二区动漫| 亚洲天堂av在线免费| 国产精品久久网站| 免费欧美日韩| 欧美成年网站| 宅男噜噜噜66一区二区| 亚洲一区久久久| 国语自产在线不卡| 亚洲人成绝费网站色www| 欧美日韩另类综合| 欧美一区二区三区的| 久久久久久亚洲精品不卡4k岛国| 欧美精品在线网站| 午夜精品视频一区| 久久久久久综合| 夜夜嗨av一区二区三区| 亚洲综合99| 亚洲国产影院| 亚洲资源av| 亚洲精品乱码久久久久| 99在线|亚洲一区二区| 国际精品欧美精品| 日韩香蕉视频| 精品999网站| 在线亚洲免费| 亚洲欧洲在线看| 欧美影院午夜播放| 99精品欧美| 久久久爽爽爽美女图片| 亚洲午夜精品17c| 欧美r片在线| 久久精品人人| 欧美视频网址| 亚洲国产精品成人va在线观看| 久久久av毛片精品| 亚洲天堂成人在线观看| 欧美在线免费播放| 在线视频精品一区| 久久综合中文| 久久综合色天天久久综合图片| 性欧美video另类hd性玩具| 亚洲精品精选| 久久野战av| 久久久久久噜噜噜久久久精品| 午夜精品久久久久久久久| 亚洲电影在线看| 久久激情综合网| 欧美伊人影院| 国产精品一二三四| 中文在线不卡| 亚洲欧美日韩另类精品一区二区三区| 在线亚洲美日韩| 亚洲乱码久久| 欧美精品粉嫩高潮一区二区 | 麻豆国产精品va在线观看不卡| 亚洲在线观看免费| 一本色道88久久加勒比精品| 美女性感视频久久久| 狂野欧美激情性xxxx欧美| 国产欧美日韩精品丝袜高跟鞋| 久久免费视频在线观看| 国产精品美女999| 亚洲一级特黄| 欧美一区二区免费| 国产精品国产a级| 国产欧美一区二区在线观看| 欧美在线三区| 国产欧美一区在线| 久久超碰97人人做人人爱| 久久免费国产| 亚洲国产成人久久综合一区| 久久综合色8888| 亚洲高清三级视频| 在线午夜精品自拍| 国产精品自拍一区| 久久九九免费视频| 亚洲国产一区二区三区高清 | 亚洲国产日韩欧美一区二区三区| 欧美1区视频| 欧美激情一区| 亚洲麻豆国产自偷在线| 欧美日韩一区综合| 亚洲视频在线一区| 久久一区激情| 亚洲精品乱码久久久久| 国产精品成人一区| 久久精品视频99| 亚洲激情视频在线| 欧美一区二区| 91久久精品国产91性色tv| 欧美日韩一区二区三区视频| 香蕉久久精品日日躁夜夜躁| 美日韩在线观看| 亚洲一区二区高清视频| 国产日本欧美一区二区| 免费黄网站欧美| 亚洲综合激情| 亚洲国产精品第一区二区| 中文国产成人精品| 狠狠色狠狠色综合日日tαg| 欧美日韩不卡视频| 久久精品女人天堂| 这里是久久伊人| 欧美va天堂在线| 午夜电影亚洲| 亚洲精品国产系列| 国模精品一区二区三区| 欧美日韩精品在线观看| 久久久噜噜噜久噜久久| 亚洲一区二区三区精品在线| 亚洲第一精品久久忘忧草社区| 国内自拍亚洲| 欧美激情综合五月色丁香小说 | 亚洲欧美另类国产| 在线成人av.com| 国产精品你懂的在线| 欧美国产一区二区在线观看| 亚洲男人av电影| 99精品国产在热久久| 你懂的国产精品永久在线| 久久爱www| 欧美一区二区福利在线| 亚洲先锋成人| 一片黄亚洲嫩模| 日韩一级免费观看| 亚洲日本精品国产第一区|