alice收到一些很特別的生日禮物:區間。即使很無聊,alice還是能想出關於區間的很多遊戲,其中乙個是,alice從中選出最長的不同區間的序列,其中滿足每個區間必須在禮物中,另序列中每個區間必須包含下乙個區間。
程式設計計算最長序列的長度。
輸入檔案第一行包含乙個整數n(1<=n<=100000),表示區間的個數。
接下來n行,每行兩個整數a和b描述乙個區間(1<=a<=b<=1000000)。
輸出滿足條件的序列的最大長度
第一眼:
這尼瑪不是最長不上公升子串行麼!!!
第二眼:
這尼瑪就是最長不上公升子串行!!!
本著 刷對傻x題,水過暴力分 竭盡所能的原則,我想都不想就打了o(n²)的原版
打完的一瞬間想到:
不對,這裡n忒大,會爆!
於是就用複雜度為o(nlogn)的最長不上公升子串行演算法
開始之前對座標排序,保證x從小到大且當x相等時y從大到小,實現可用多關鍵字的快排
考試的時候想不到,也算是一種水平低の體現吧
#include
#include
#include
using
namespace
std;
struct line
;line v[100001];
long
long t[100001],f[100001];
bool cmp(line x,line y)
int max(int x,int y)
int find(int i,int j,int x)
return i;
}int main()
printf("%lld\n",ans);
return0;}
int main()
printf("%lld\n",ans);
return
0;}
var
n:longint;
x,y,f,t:array[0..100000]of int64;
procedure
swap
(var i,j:int64);
var tmp:longint;
begin
tmp:=i;
i:=j;
j:=tmp;
end;
function
min(x,y:int64):int64;
begin
min:=x;
if ythen
min:=y;
end;
procedure
qsort
(l,r:int64);
var i,j,key,ley:longint;
begin
if l>=r then
exit;
i:=l;
j:=r;
key:=x[l+random(r-l+1)];
ley:=y[l+random(r-l+1)];
repeat
while (x[i]or(x[i]=key)and(y[i]>ley) do inc(i);
while (x[j]>key)or(x[j]=key)and(y[j]do dec(j);
if i<=j then
begin
swap(x[i],x[j]);
swap(y[i],y[j]);
inc(i);
dec(j);
end;
until i>j;
qsort(l,j);
qsort(i,r);
end;
function
find
(i,j,v:int64):int64;
var mid:longint;
begin
while i<=j do
begin
mid:=i+(j-i)div
2; if t[mid]>=v then
i:=mid+1
else
j:=mid-1;
end;
find:=i;
end;
procedure
main;
var i,j,max,ans:longint;
begin
for i:=1
to n do t[i]:=-maxlongint;
qsort(1,n);
ans:=0;
i:=0;
for i:=1
to n do
begin
j:=find(1,i,y[i]);
f[i]:=j;
if y[i]>t[f[i]] then
t[f[i]]:=y[i];
if f[i]>ans then
ans:=f[i];
end;
writeln(ans);
end;
procedure
init;
var i:longint;
begin
randomize;
readln(n);
for i:=1
to n do
readln(x[i],y[i]);
end;
begin
init;
main;
end.
跳舞 紀中2545 dp
小明今天得到乙個跳舞毯遊戲程式dance。遊戲每次連續出n 個移動的 箭頭 箭頭依次標號為1 到n,並且的相應的分數s 1.n 如果你能 踏中 第i 號箭頭,你將獲得相應的分數s i 否則將被扣除相應的分數。另外,遊戲還有乙個累計獎勵機制 如果踏準次數累計達到t,並且是在踏中第i個箭頭達到的,則將得...
書架 紀中2931 dp 堆
題目大意 當farmer john閒下來的時候,他喜歡坐下來讀一本好書。多年來,他已經收集了n本書 1 n 100,000 他想要建立乙個多層書架,來存放它們。每本書 i 擁有乙個寬度 w i 和乙個高度 h i 所有的書需要按順序,放到書架的每一層。舉例來說,第一層書架放k本書,應該放書1.k 第...
邦德 紀中 1236 狀壓dp
題目大意 每個人都知道詹姆斯邦德,著名的007,但很少有人知道很多任務都不是他親自完成的,而是由他的堂弟們吉公尺邦德完成 他有很多堂弟 詹姆斯已經厭倦了把乙個個任務分配給乙個個吉公尺,他向你求助。每個月,詹姆斯都會收到一些任務,根據他以前執行任務的經驗,他計算出了每個吉公尺完成每個任務的成功率,要求...