廠裡田徑賽 長理周賽 樹狀陣列

2021-10-03 05:16:48 字數 1447 閱讀 9693

題目:

題目鏈結

描述一年一度的廠裡田徑賽又開始了,hdw等nn位田徑高手(不是)踴躍報名參加

各就各位,預備備,pia

隨著號令槍響,hdw一馬當先的衝了出去,在跑步的過程中,hdw突然想到乙個問題

由於每個選手都有乙個編號ii,第i個選手身上有乙個能力值a_iai​

,現在每個選手都想知道排在他前面的選手中,有多少個選手的能力值比他小

即對於所有的i\in n求j\in [1,i),a_j輸入

第一行輸入乙個數n(n\in[1,300000])n(n∈[1,300000])

第二行n個數,a_iai​

表示第ii個人的能力值 a_i\in[1,300000]ai​

∈[1,300000]

輸出輸出n行

第i行表示在第ii個人之前有多少個人能力值比a_iai​

題解:原來這個題目就是樹狀陣列逆序對的裸題,但是這個又不是逆序對,可能是正序對吧,maybe,有兩個陣列 t,d,t陣列用來記錄t[x] = (1,x)內有幾個數字,d陣列用來讀資料,每次按序號add,然後sum(d[i] -1)這個就 是在區間(1,d[i]-1)的數字有幾個,即ans;

**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

// memset 無窮大時可用;

#define maxn 50000

#define m 300005

intlowbit

(int x)

;void

add(

int x)

;int

sum(

int x)

;using

namespace std;

int d[m]

,t[m]

,n;int

lowbit

(int x)

/* i */

void

add(

int x)

}int

sum(

int x)

return res;

}int

main()

for(

int i =

1; i <= n;

++i)

return0;

}

周賽 廠裡田徑賽 題解(線段樹)

其實就是找前面有多少個比他小的數 顯然要用線段樹,是裸的線段樹,但是不知道為什麼自己卻一點思路都沒有。對於能力值建立一顆線段樹or 樹狀陣列,按編號從小到大列舉每個運動員,每次先查詢當前能力值在 1,a i 1 的人數 及第i個人的結果,然後再將這個人的能力值更新進去 讓能力值為a i 的人數 1 ...

資料結構應用 田徑賽的時間安排

假設某校的田徑選拔賽共設六個專案的比賽,即跳高 跳遠 標槍 鉛球 100公尺和200公尺短跑,規定每個選手至多參加三個專案的比賽。現有五名選手報名比賽,選手所選擇的專案如參賽選手比賽專案表所示。現在要求設計乙個競賽日程安排表,使得在盡可以短的時間內安排完比賽。1 為了能較好地解決這個問題,首先應該選...