p4240 人數統計
問題描述
何老闆經營著一家大公司, 公司總共有 n 個員工, 編號 1 到 n。 何老闆編號 1。
除了何老闆外, 每個員工有且僅有乙個直接上司(呈樹狀)。 每個員工都有乙個工作能力值。 何老闆想知道, 對於第 i 號員工, 他的所有下屬(包括間接的下屬)中, 能力值比 i 強的有多少人? (即統計 i 為根的子樹中, 能力值比 i 大的節點數)
輸入格式
第一行, 乙個整數 n, 表示公司職員的總數, 員工編號 1 到 n。
接下來 n 行, 每行乙個整數, 其中第 i 行表示 i 號員工的能力值。
接下來 n-1 行, 每行乙個整數, 其中第 i 行的整數表示編號 i+1 的員工的直接上司的編號。
輸出格式
n 行, 每行乙個整數, 其中第 i 行表示編號為 i 的員工的下屬中, 能力比 i 強的人數。
輸入輸出樣例
樣例輸入 1
5 8
0424
85697
66168
70466
95774
1 1 2 3
樣例輸出 1
2 0 1 0 0
樣例說明 無
資料範圍
對於約 30%的資料,有 2<=n<=200
對於約 100%的資料,有 2<=n<=100,000 1<=能力值<=1,000,000,000.
其實很容易想到深搜統計能力值大於當前節點的節點個數
所以我們優化就在於統計上面
我們開乙個陣列cnt
cnt[i]=(當前的能力值==i的人的個數)
然後我們在每次求結果時只需要求cnt[i]>當前能力值的點即可
那麼統計就很簡單了 用樹狀陣列
關鍵在於 怎麼能夠讓所有結點共用乙個cnt陣列
如果只用乙個cnt就會出現 當前求出的和 包含了 別人家的兒子
樣例資料
我們可以得到搜尋順序 1->2->4->3->5
我們的思路是 在跑完p的所有兒子之後 統計能力值大於p的能力值的點的個數
但是對於三號點 就會出現一種很尷尬的情況
三的cnt當中可能包含二的兒子的統計
那麼這個時候我們操作就是
在跑p的兒子之前 先統計能力值大於p的能力值的點的個數
然後跑p的兒子
然後再一次統計能力值大於p的能力值的點的個數
前後之差即為 真·比爸爸強的兒子的個數
而不是 偽·比叔叔強的侄子的個數
我也不知道是誇這些員工強,還是誇這些員工能力強…
所以我們就要離散化
比如對於能力值 987654 654321 123456 224567
他們從大到小排序之後
987654 654321 224567 123456
我們就記錄點的值為排序後它的能力值的位置
點 位置 原能力值
1 1 987654
2 2 654321
3 4 123456
4 3 224567
那麼在每次統計後 我們只需要在 點的位置上 +1 即可
然後由於我們是從大到小排序的
所以我們只需要用樹狀陣列統計位置小於 當前點位置 的位置 的值之和(很繞)
於是能力值被強行轉成了[1,100000]之間的值
這樣就不會爆空間了
在重新編號(離散化)時能力值相同的的點應該標成相同的位置
//在oj上要交要擴棧 所有注釋的語句不是 擴棧 就是 輸入輸出
#include
#include
#include
#define lowbit(i) (i&-i)
using
namespace
std;
struct companya[100123];
bool cp1(company a,company b)
bool cp2(company a,company b)
inline
int input()
int add(int p)//樹狀陣列點修改
int sum(int p)//樹狀陣列的 統計
int dfs(int s)//簡單暴力的深搜
int main()
sort(a+1,a+n+1,cp2);
dfs(1);
for(int i=1;i<=n;i++)printf("%d\n",cnt[i]);
// __asm__("movl (%%eax), %%esp;\n"::"a"(my_stack):"%esp");
}
行情分發節點資訊統計 登陸人數, 合約數
h2.需求 實時統計 分發節點的登入人數 以圖形形式顯示所有 分發節點登陸人數總和以及 單個 分發節點上登陸的人數 以圖形形式現實所有 節點頻寬消耗 h2.方案 分發節點之間乙個搭建rabbit mq節點 客戶端連線 分發節點時向rabbit mq節點傳送連線訊息 客戶端斷線時向rabbit mq節...
第九周實踐專案3 人數不定的工資類
問題及 all right reserved.檔名稱 77.cpp 作 者 董凱琦 完成日期 2016年4月28日 版 本 號 v1.0 問題描述 設計乙個工資類 salary 其中的資料成員包括職工人數 number,人數不定 和number個職工的工資salary,要求輸入職工工資並逐個輸出。程...
第6周專案3 人數不定的工資類
檔名稱 test.cpp 作 者 劉暢 完成日期 2015年 4 月 11 日 版 本 號 v1.0 問題描述 設計乙個工資類 salary 其中的資料成員包括職工人數 number,人數不定 和number個職工的工資salary,要求輸入職工工資並逐個輸出。應用。將salary宣告為指標型別的成...