題目描述 description
m公司是乙個非常龐大的跨國公司,在許多國家都設有它的下屬分支機構或部門。為了讓分布在世界各地的n個部門之間 協同工作,公司搭建了乙個連線整個公司的通訊網路。該網路的結構由n個路由器和n-1條高速光纜組成。每個部門都有乙個專屬的路由器,部門區域網內的所有 機器都聯向這個路由器,然後再通過這個通訊子網與其他部門進行通訊聯絡。該網路結構保證網路中的任意兩個路由器之間都存在一條直接或間接路徑以進行通訊。
高速光纜的資料傳輸速度非常快,以至於利用光纜傳輸的延遲時間可以忽略。但是由於路由器老化,在這些路由器上進行資料交換會帶來很大的延遲。而兩 個路由器之間的通訊延遲時間則與這兩個路由器通訊路徑上所有路由器中最大的交換延遲時間有關。作為m公司網路部門的一名實習員工,現在要求你編寫乙個簡單 的程式來監視公司的網路狀況。該程式能夠隨時更新網路狀況的變化資訊(路由器資料交換延遲時間的變化),並且根據詢問給出兩個路由器通訊路徑上延遲第k大 的路由器的延遲時間。
你的程式從輸入檔案中讀入n個路由器和n-1條光纜的連線資訊,每個路由器初始的資料交換延遲時間ti,以及q條詢問(或狀態改變)的資訊。並依次處理這q條詢問資訊,它們可能是:
1. 由於更新了裝置,或者裝置出現新的故障,使得某個路由器的資料交換延遲時間發生了變化。
2. 查詢某兩個路由器a和b之間的路徑上延遲第k大的路由器的延遲時間。
輸入描述 input description
輸入檔案network.in中的第一行為兩個整數n和q,分別表示路由器總數和詢問的總數。
第二行有n個整數,第i個數表示編號為i的路由器初始的資料延遲時間ti。
緊接著n-1行,每行包含兩個整數x和y。表示有一條光纜連線路由器x和路由器y。
緊接著是q行,每行三個整數k、a、b。如果k=0,則表示路由器a的狀態發生了變化,它的資料交換延遲時間由ta變為b。如果k>0,則表示詢問a到b的路徑上所經過的所有路由器(包括a和b)中延遲第k大的路由器的延遲時間。注意a可以等於b,此時路徑上只有乙個路由器。
輸出描述 output description
輸出檔案為network.out。對於每乙個第二種詢問(k>0),輸出一行。包含乙個整數為相應的延遲時間。如果路徑上的路由器不足k個,則輸出資訊「invalid request!」(全部小寫不包含引號,兩個單詞之間有乙個空格)。
樣例輸入 sample input
5 55 1 2 3 4
3 12 1
4 35 3
2 4 5
0 1 2
2 2 3
2 1 4
3 3 5
樣例輸出 sample output
invalid request!
資料範圍及提示 data size & hint
100% 測試資料滿足 n<=80000,q<=30000 。任意乙個路由器在任何時刻都滿足延遲時間小於108。對於所有詢問滿足 。
40% 測試資料滿足所有詢問中1<=k<=5 ,且路由器的延遲時間不會發生變化。
10% 測試資料滿足n,q<=8000 。
正解:帶修改主席樹
解題報告:誰能知道二分寫多了,寫線段樹左兒子(l,mid-1)右兒子(mid+1,r)的痛。。。就是帶修改主席樹的板子,直接查詢即可
1 #include 2 #include 3 #include 4 #include5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11
#define min(a,b) a12
#define rg register
13const
int n = 200000;14
const
int m = 15000000;15
16using
namespace
std;
1718 mapmap;
1920
intgi()
2627
struct
datet[n];
3031
intcnt,n,q,id[n],dis[n],son[n],top[n],fa[n],siz[n];
32int rt[n],ll[m],rr[m],tr[m],nn[n][2
],head[n];
33int
u[n],o;
34 vectorls,lr;
3536
void dfs1(int xh,int
ff)45 siz[xh]=1;46
return;47
}4849void dfs2(int xh,int
tp)56
return;57
}5859int
cmp(date a,date b)
6263
void down(int &xh,int w,int x,int l,int
r)72
73void update(int xh,int val,int
x)78
return;79
}8081struct
deted[n];
8485
void push(int xh,int
x)91
return;92
}9394void lca(int l,int
r)100
else
104if (dis[l]1),push(id[l]-1,0
);105
else push(id[l],1),push(id[r]-1,0
);106
return
;107
}108
109int query(int l,int r,int
k)126
else
131}
132 ans=min(ans,o);
133return
ans;
134}
135136
intmain(),u[++o]=t[i].t;
139for (rg int i=1; ii)
144 cnt=0
;145 dfs1(1,0),dfs2(1,1
);146
for (rg int i=1; i<=q; ++i);
148if (d[i].k==0) u[++o]=d[i].b;
149}
150 sort(u+1,u+o+1
);151
int hh=unique(u+1,u+o+1)-u-1
;152
for (rg int i=1; i<=hh; ++i) map[u[i]]=i;
153for (rg int i=1; i<=n; ++i) t[i].i=id[t[i].i];
154 cnt=0
;155
for (rg int i=1; i<=n; ++i)
159for (rg int i=1; i<=q; ++i)
160if
(d[i].k)
165else
171return0;
172 }
CTSC2018 Day2T1 Juice混合果汁
題解 在考場上a掉的題。把美味度排個序,然後按照 p為權值建立主席樹,把每個果汁按照拍好的順序新增進去。主席樹上維護總公升數cnt以及總 sum。對於每個詢問,我們二分乙個美味值,check的時候去主席樹上查詢大於等於這個美味值的果汁中購買l公升的 即可。1 include2 include3 de...
codevs1464 裝箱問題2
題目描述 description 乙個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1 1,2 2,3 3,4 4,5 5,6 6。這些產品通常使用乙個 6 6 h 的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的...
codevs 1464 裝箱問題 2
題目描述 description 乙個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1 1,2 2,3 3,4 4,5 5,6 6。這些產品通常使用乙個 6 6 h 的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的...