1067 SCOI2007 降雨量 線段樹

2022-09-14 16:21:28 字數 1736 閱讀 4396

我們常常會說這樣的話:「x年是自y年以來降雨量最多的」。它的含義是x年的降雨量不超過y年,且對於任意

y<z<x,z年的降雨量嚴格小於x年。例如2002,2003,2004和2023年的降雨量分別為4920,5901,2832和3890,

則可以說「2023年是自2023年以來最多的」,但不能說「2023年是自2023年以來最多的」由於有些年份的降雨量未

知,有的說法是可能正確也可以不正確的。

輸入僅一行包含乙個正整數n,為已知的資料。以下n行每行兩個整數yi和ri,為年份和降雨量,按照年份從小

到大排列,即yi<yi+1。下一行包含乙個正整數m,為詢問的次數。以下m行每行包含兩個數y和x,即詢問「x年是

自y年以來降雨量最多的。」這句話是必真、必假還是「有可能」。

對於每乙個詢問,輸出true,false或者maybe。

62002 4920

2003 5901

2004 2832

2005 3890

2007 5609

2008 3024

52002 2005

2003 2005

2002 2007

2003 2007

2005 2008

false

true

false

maybe

false

100%的資料滿足:1<=n<=50000, 1<=m<=10000, -10^9<=yi<=10^9, 1<=ri<=10^9

非常水的一道題……無非就是查詢一下區間最大值然後離散化一下

注意分類討論就好

1 #include2 #include3 #include4 #include5

#define n (100000+100)

6using

namespace

std;78

int a[n],b[n],segt[n*4

],n,m,x,y;910

int getid(int

x)11

1415

void update(int node,int l,int r,int l1,int r1,int

k)16

23int mid=(l+r)/2

;24 update(node*2

,l,mid,l1,r1,k);

25 update(node*2+1,mid+1

,r,l1,r1,k);

26 segt[node]=max(segt[node*2],segt[node*2+1

]);27}28

29int query(int node,int l,int r,int l1,int

r1)30

3839

intmain()

4047 scanf("

%d",&m);

48for (int i=1; i<=m; ++i)

4959

if (a[idx]!=x && a[idy]!=y)//

詢問的左右端點都未知

60 printf("

maybe\n");

61if (a[idx]==x && a[idy]!=y)//

詢問的右端點未知

6268

if (a[idx]!=x && a[idy]==y)//

詢問的左端點未知

6975

}76 }

題解 P2471 SCOI2007 降雨量

首先我們來分析一下題意。題目會給出兩個大小為 n 的陣列,y 和 r 其中 y i 表示第 i 個年份是第幾年,r i 表示的是第 y i 年的降雨量。之後,將會有 m 次詢問,每次詢問給出兩個年份 y 和 x 若用 z 表示 y 和 x 之間的年份,則我們要判斷的是三個年份的降雨量是否滿足 y g...

降雨量 HYSBZ 1067 題解

我們常常會說這樣的話 x年是自y年以來降雨量最多的 它的含義是x年的降雨量不超過y年,且對於任意 y z x,z年的降雨量嚴格小於x年。例如2002,2003,2004和2005年的降雨量分別為4920,5901,2832和3890,則可以說 2005年是自2003年以來最多的 但不能說 2005年...

洛谷 P2471 SCOI2007 降雨量

題目鏈結 在神貼題單裡看到了這道題,就拿出來做了。神貼鏈結 推薦看看這個洛穀神貼題單,真的很好笑 題目思路比較明顯對,年份離散化,年份也是單調遞增的。很明顯,我們 是需要維護年份區間最大的,可以利用線段樹或者st表維護,針對每一組 詢問,我們由已知條件來分類討論即可,分類討論比較複雜,需要注意細 節...