hrbust 1400 汽車比賽(樹狀陣列)

2021-09-13 04:05:30 字數 1331 閱讀 6257

xiange非常喜歡賽車比賽尤其是像達喀爾拉力賽,這種的比賽規模很大,涉及到很多國家的車隊的許多車手參賽。xiange也夢想著自己能舉辦乙個這樣大規模的比賽,xiange幻想著有許多人參賽,那是人山人海啊,不過xiange只允許最多100000人參加比賽。

這麼大規模的比賽應該有技術統計,在xiange的比賽中所有車輛的起始點可能不同,速度當然也會有差異。xiange想知道比賽中會出現多少次超車(如果兩輛車起點相同速度不同也算發生一次超車)。

input

本題有多組測試資料,第一行乙個整數n,代表參賽人數,接下來n行,每行輸入兩個資料,車輛起始位置x i 和速度 v i(0sample input

22 1

2 25

2 69 4

3 14 9

9 17

5 56 10

5 63 10

9 10

9 52 2

sample output16

7給出n個汽車的起始位置和速度,問總共可以發生多少次超車,位置相同,速度不一樣也算一次超車。

位置小速度大的車肯定能超過位置大速度小的車。把n個車按起始位置從小到大,如果相等按速度從大到小進行排序。用樹狀陣列進行統計,區間為速度大小,對第j輛車來說,假設他的速度為v,則首先更新vn[v] ++,並利用lowbit向上更新,因為這是第j輛車,統計區間【1,v】的速度有多少輛車(包括自己),這些車是不可能超過它的,那麼j- sum(v)則是前j輛車有多少輛可以超過當前的車,也就是超車的次數。

#include #include #include using namespace std;

const int maxn=100002;

const int maxv=1000002;

int vn[maxv];

struct car

car[maxn];

bool cmp(car a,car b)//先按位置從小到大進行排序,如果位置相等,按速度從大到小進行

return false;}

int lowbit(int x)

void update(int p,int max)}

int sum(int p)//這題這裡的意思是前p輛車中比當前車速度小或相等的車有幾輛(包括它自己)

return s;}

int main()

sort(car+1,car+1+n,cmp);

long long ans=0;

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

cout<}

return 0;

}

140 單詞拆分 II

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s catsanddog worddict cat ca...

140 單詞拆分 II(continue)

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 示例 1 輸入 s catsanddog worddict cat cats and sand dog 輸出 cats and dog ...

140 單詞拆分 II leecode

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。題目鏈結 這道題明顯是個搜尋的題目。但問題在於如何進行搜尋。每個位置可能...