思路
其中二分法就是用來判斷左右還剩幾個位置,是不是比每個人報的數大,大的話就填進去。
像這個題目,可以先用暴力想一想該怎麼做,然後用區間資料結構來解決
比如這道題:
**
部分參考計蒜客解答。侵刪。#include
using
namespace std;
const
int max_n =
500050
;int c[max_n+5]
,rank[max_n]
,a[max_n]
,n;int
lowbit
(int x)
void
change
(int x,
int sum)
intgetsum
(int x)
intmain()
a[1]=
0;for(
int i = n;i>=
1;i--
) rank[i]
=l;change
(l,1);
}for
(int i =
1;i<=n;i++
)return0;
}
樹狀陣列 奇怪的報數遊戲
大致思路 一看,序列,資料很大,暴力可能就是去遍歷,題中還有 前面有多少 的字眼,感覺就是用樹狀陣列做。正向分析感覺有點困難,我們反向來想,如果是序列的最後乙個人,他前面有a人的編號比自己小,而他前面就是除他之外的所有人,所以他的編號應該就是a 1.那麼倒數第二個人呢?他前面的人是除他 而且除去最後...
計蒜客 奇怪的報數遊戲
樹狀陣列 二分 這裡先給出乙個公式 第 i 個數的編號 i 之前比 i 小的總數量 i 之後比 i 小的總數量 1 例如 1 4 3 6 2 5 這個序列,我們可以用這個序列來驗證上述的公式,比如3 1 3前邊只有1比3小,所以只有1個 1 3後邊只有2比3小,所以只有1個 1,對吧。已經找出來的編...
習題8 4 報數
報數遊戲是這樣的 有n個人圍成一圈,按順序從1到n編好號。從第乙個人開始報數,報到m 本題要求編寫函式,給出每個人的退出順序編號。函式介面定義 void countoff int n,int m,int out 其中n是初始人數 m是遊戲規定的退出位次 保證為小於n的正整數 函式countoff將每...