高橋和低橋 CSU 1335

2021-07-30 04:07:56 字數 1431 閱讀 1604

有個腦筋急轉彎是這樣的:有距離很近的一高一低兩座橋,兩次洪水之後高橋被淹了兩次,低橋卻只被淹了一次,為什麼?答案是:因為低橋太低了,第一次洪水退去之後水位依然在低橋之上,所以不算「淹了兩次」。舉例說明:

假定高橋和低橋的高度分別是5和2,初始水位為1

第一次洪水:水位提高到6(兩個橋都被淹),退到2(高橋不再被淹,但低橋仍然被淹)

第二次洪水:水位提高到8(高橋又被淹了),退到3。

沒錯,文字遊戲。關鍵在於「又」的含義。如果某次洪水退去之後一座橋仍然被淹(即水位不小於橋的高度),那麼下次洪水來臨水位提高時不能算「又」淹一次。

輸入n座橋的高度以及第i次洪水的漲水水位ai和退水水位bi,統計有多少座橋至少被淹了k次。初始水位為1,且每次洪水的漲水水位一定大於上次洪水的退水水位。

input

輸入檔案最多包含25組測試資料。每組資料第一行為三個整數n, m, k(1<=n,m,k<=105)。第二行為n個整數hi(2<=hi

<=108),即各個橋的高度。以下m行每行包含兩個整數ai和bi(1<=bi

i<=108, ai>bi-1)。輸入檔案不超過5mb。

output

對於每組資料,輸出至少被淹k次的橋的個數。

sample input

2 2 2
2 5
6 2
8 3
5 3 2
2 3 4 5 6
5 3
4 2
5 2

sample output

case 1: 1
case 2: 3
題意   就是區間覆蓋 求被覆蓋了k次及以上的點數  ,通過樹狀陣列+二分 來做
#include#include#include#include#include#include#include#include#include#include #define inf 0x3f3f3f3f

using namespace std;

int n,m,k;

int tree[100010];

int h[100010];

void add(int x,int num)

}int read(int x)

return ret;

}int main()

sort(h+1,h+1+n);

int a,b,b1;

b1=2;

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

int ans=0;

for(int i=1; i<=n; i++)

printf("case %d: ",ooo);

printf("%d\n",ans);

}}

csu 1335 高橋和低橋

description 有個腦筋急轉彎是這樣的 有距離很近的一高一低兩座橋,兩次洪水之後高橋被淹了兩次,低橋卻只被淹了一次,為什麼?答案是 因為低橋太低了,第一次洪水退去之後水位依然在低橋之上,所以不算 淹了兩次 舉例說明 假定高橋和低橋的高度分別是5和2,初始水位為1 第一次洪水 水位提高到6 兩...

高橋和低橋 CSU 1335

高橋和低橋 csu 1335 time limit 1000 ms memory limit 131072 kb 有個腦筋急轉彎是這樣的 有距離很近的一高一低兩座橋,兩次洪水之後高橋被淹了兩次,低橋卻只被淹了一次,為什麼?答案是 因為低橋太低了,第一次洪水退去之後水位依然在低橋之上,所以不算 淹了兩...

CSU1335 高橋和地橋

proble 有個腦筋急轉彎是這樣的 有距離很近的一高一低兩座橋,兩次洪水之後高橋被淹了兩次,低橋卻只被淹了一次,為什麼?答案是 因為低橋太低了,第一次洪水退去之後水位依然在低橋之上,所以不算 淹了兩次 舉例說明 假定高橋和低橋的高度分別是5和2,初始水位為1 第一次洪水 水位提高到6 兩個橋都被淹...