我們常常會說這樣的話:「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表維護,針對每一組 詢問,我們由已知條件來分類討論即可,分類討論比較複雜,需要注意細 節...