考試
時間限制: 1 sec 記憶體限制: 128 mb
題目描述
s中開展了省選集訓,有n位選手的實力參差不齊。眾所周知,如果題目太水,那麼就會有人ak離場後打遊戲,如果題目太難,那麼就會有人頹廢離場後打遊戲。作為出題人的你自然不希望有太多人出去打遊戲,不然ob就會很生氣。所以你需要設定題目的難度,盡量讓最少的人出去打遊戲,並且同時題目盡可能難一些。
輸入第1行乙個正整數n,表示一共有n名選手參與;
接下來n行兩個非負整數ai,bi,表示第i位選手可接受的題目難度範圍在ai~bi之間,若你設定的題目難度超過此區間,這位選手便會離場打遊戲。
輸出一共一行乙個數字ans,表示你設定的題目難度為ans,應當在讓最少的人離場的同時使其盡可能的大。
樣例輸入 copy
31 5
95 105
5 110
樣例輸出 copy
105提示
樣例解釋
有三名選手參與,方便起見命名第1名選手叫小x,第2名選手叫小q,第3名選手叫小p。
題目難度如果要滿足蒟蒻小x,那麼小q便一定會ak後頹廢,為了兼顧小p,難度不得不設為5,此時1人離場。
如果要滿足巨佬小q,那麼無論如何小x也會覺得題目太難憤憤離場,為了兼顧小p,難度最大可設為105,此時1人離場。
綜上,題目難度最大為105。
【資料範圍】
對於30%的資料:n ≤ 10
對於50%的資料:n ≤ 1000
對於另外20%的資料: 0 ≤ ai ≤ bi ≤ 100000
對於100%的資料: n ≤ 100000, 0 ≤ ai, bi ≤ 1000000000
題意就是給出每個人能承受難度的範圍,超過這個範圍這個人就會離場,在最少離場人數中找乙個最大的難度。也就是找乙個點,這個點被覆蓋的次數最多且盡可能大,且這個點最優解一定是在端點上的,可以證明對於每乙個不在端點上的點, 一定可以找到乙個在端點上的點來替代。對於每一名選手,在承受範圍 [l,r] 區間上加一,代表這個區間內每乙個難度都多一位同學可以比賽,尋找數最大的端點即可。在區間加數不難想到差分,但是這個題 l 和 r 的範圍比較大,需要離散化處理一下即可。
題目跟隊爺的新書挺像的,應該還可以用掃瞄線水掉。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define x first
#define y second
using
namespace std;
typedef
long
long ll;
typedef pair<
int,
int> pii;
const
int n=
200010
,mod=
1e9+
7,inf=
0x3f3f3f3f
;const
double eps=
1e-6
;int n;
int a[n]
,cnt=0;
int idx,ans;
vector<
int>v;
pii p[n]
;//存區間
intfind
(int x)
intmain()
;}sort
(v.begin()
,v.end()
);v.erase
(unique
(v.begin()
,v.end()
),v.
end())
;for
(int i=
1;i<=n;i++)
n=v.
size()
;for
(int i=
1;i) a[i]
+=a[i-1]
; idx=
0,ans=a[0]
;for
(int i=
1;icout<
}
B Light bulbs 離散化 差分
b.light bulbs 離散化 差分 題意 n個燈剛開始是關的,m次操作對 l,r 內的全部的燈反轉。問最後有幾個燈亮著。思路 剛開始差分直接便利了所有點,t了。所有只需要考慮哪些有貢獻的2 m個點就行了,對於區間中哪些0的部分,就不需要遍歷了。對於重複的點也不用管。include using ...
離散化系列 離散化 字首和 差分
區間和 acwing 802.區間和 這道題所展現的情況就是,資料並不是很多,利用到的元素值也不大,但關鍵就是下標太大,無法正常的以陣列下標來進行操作。因此,離散化,在這裡就是很合適了,把大的下標對映為小的下標後再進行處理。對於這道題的解題步驟具體可分為一下幾步 1.儲存,就是將所用用到的下標存起來...
跳方格 離散化 差分
時間限制 1 sec 記憶體限制 128 mb 題目描述 有乙個長長的走廊,巨神 ctt 把它分成m方格,從左到右編號為1,2,m。有一天,巨神 ctt 得到了n個蹦床,他把這些蹦床放在方格裡,他在編號為1的方格裡放了乙個蹦床,在編號為2,3,m 1的方格中放置了n 1個蹦床 乙個方格只能放乙個蹦床...