3799 -- 【模擬試題】訓練場
description
某中學有很多學生社團,其中電競社是最受歡迎的乙個。該社團中總共有n只遊戲戰隊,但是該中學只有乙個遊戲訓練場館,每次只能容納乙隻戰隊訓練。
每只戰隊對訓練時間都有一定的要求,比如甲戰隊想要在a到b這段時間訓練,乙戰隊想要在c到d這段時間訓練,......
作為訓練場管理員的你總是收到形如(x,y)的詢問,意思是查詢在x到y這段時間內,最多能滿足多少個只戰隊訓練。現在有m個詢問擺在你面前,請你快速做出回答!
input
第一行,兩個整數n和m。
接下來n行,每行兩個整數a和b,表示乙隻戰隊訓練的起止時間點。
接下來m行,每行兩個整數x和y,表示乙個詢問的起止點。
output
m行,每行乙個整數,表示一次詢問的答案。
sample input
3 21 2
2 31 3
1 21 3
sample output12
hint
【資料範圍】
x < y同時a < b。 0 <= x,y,a,b <= 1,000,000,000
對於30%的資料,有0 < n,m <= 2000
對於50%的資料,有0 < n,m <= 50000
對於100%的資料,有0 < n,m <= 100000
作為當天考試壓軸題這道題還是充滿了震撼..畢竟當時too young,看到這道題就先去打了個線段樹,然後發現根本沒法維護..於是30分棄坑了。
前幾天看了看覆蓋牛棚(內網鏈結)的題解,發現這道題簡直神似,都使用了同樣的演算法:
倍增。
倍增主要拿來覆蓋區間的速度。
現在要二分乙個解,對於解的驗證,其速度相對較慢,舉乙個例子:
有線段a(st,ed),在這條線段後面,找出另一條線段b,使得a與b有交集,且b的右端點靠的最後。
樸素的演算法是一條一條線段地列舉,速度為o(n).
o(n)太慢了,考慮優化,將線段排序,獲得單調之後考慮二分,每次二分乙個mid,指在a後mid個,且與a重合的線段。我們發現這個mid還是要o(mid)走過去,還是較慢。
著重優化o(mid),記錄f[i][j]為i根欄杆後面連線的第2j根欄杆,再按照樸素的st推走即可。對於乙個mid,只需o(log(mid))就能找到這個元素。
- -感覺講的很爛,畢竟語文捉雞。還是回到這個題裡面。
對於這個問題,我們有乙個貪心策略:被包含的區間肯定比包含其的大區間更優,直接捨棄大區間。證明略。
這樣問題就轉化成了乙個統計問題:在給定區間(x,y)中,統計有多少個互不相交的區間(當然要保證最優)。
資料範圍使得o(n)演算法不能通過,現在就要用上倍增了。
設f[i][j]為i往右經過2^j個區間後第2^j區間(右端點座標最小(貪心保證結果最優))的區間編號。
#include#include#include#include#include#includeusing namespace std;
inline int read()
int ret=0;
while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();
return ret*bj;
}struct node
w[100005],a[100005];
int n,m,f[100005][21]=,top=0;
bool cmp(node x,node y)
n=top;
}void st()
; f[n+1][0]=n+1;
for(int i=1;i<=n;i++)
else l=mid+1;
} int k=log2(n)+1,ret=0;
for(int i=k;i>=0;i--)
{ if(a[f[ans][i]].ed<=y)
{ ret+=(1<
BSOJ 3800 染色 貪心
3800 四校聯考1 染色 description 人人生而平等,然而後來人們逐漸選擇了不同的道路,人與人之間,變得不再平等。你可能會因為染上惡人之色而墮落,成為社會的敗類 你也可能因為染上善人之色,而在逆境中不斷成長。但是,紅與黑並非絕對的。所謂 近朱者赤,近墨者黑 你能改變周遭的環境,那麼周遭的...
P3799 妖夢拼木棒
有 nn根木棒,現在從中選 4 根,想要組成乙個正三角形,問有幾種選法?答案對 10 9 7取模。輸入 第一行乙個整數 n。第二行 n 個整數,第 i 個整數 a i,代表第 i 根木棒的長度。輸出 一行乙個整數代表答案。主要是對長度進行計算和處理 因為ai的數值偏小。注意 using namesp...
BSOJ 4852 比賽 暴力優化
4852 模擬試題 比賽 description 有兩個隊伍a和b,每個隊伍都有n個人。這兩支隊伍之間進行n場1對1比賽,每一場都是由a中的乙個選手與b中的乙個選手對抗。同乙個人不會參加多場比賽,每個人的對手都是隨機而等概率的。例如a隊有a1和a2兩個人,b隊有b1和b2兩個人,那麼 a1 vs b...