csuoj 1335 高橋和低橋

2022-07-17 17:36:11 字數 2086 閱讀 9166

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

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

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

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

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

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

輸入檔案最多包含25組測試資料。每組資料第一行為三個整數n, m, k(1<=n,m,k<=105)。第二行為n個整數hi(2<=hi<=108),即各個橋的高度。以下m行每行包含兩個整數ai和bi(1<=bibi-1)。輸入檔案不超過5mb。

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

2 2 2

2 56 2

8 35 3 2

2 3 4 5 6

5 34 2

5 2

case 1: 1

case 2: 3

分析:

資料比較大,更新 + 查詢 + 遍歷 時間複雜度很高,會有超時,所以想到用樹狀陣列來儲存,用lowbit()查詢 更新。

ac**:

1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int n = 1e5+10;7

intc[n],m,n,k,a[n];

8int

x[n],y[n];

9int lowbit(int

k)10

13void add(int k,int he)//

每一項增加乙個值

1420}21

int search(int

x)22

34return

r;35}36

int q(int

k)37

44return

query;45}

46int

main()

4763

else

6468 add(from,-1

);69 add(to,1

);70}71

int ans =0;72

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

7378 printf("

case %d: %d\n

",kkk++,ans);79}

80return0;

81 }

view code

還可以用lower_bound()解決。

1 #include2 #include3 #include4

using

namespace

std;56

int h[100005];7

int f[100005];8

9int

main()

1718 sort(h,h+n);

1920

int s = 1

,t;21

intup,dwn;

22for(int i = 0;i < m;i++)

3132

int ss = 0,res = 0;33

//printf("------\n");

34for(int i = 0;i < n;i++)

39 printf("

case %d: %d\n

",kase++,res);40}

41return0;

42 }

view code

csu 1335 高橋和低橋

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

高橋和低橋 CSU 1335

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

高橋和低橋 CSU 1335

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