區間 紀中1382 dp

2021-07-14 21:14:41 字數 2742 閱讀 3421

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,但很少有人知道很多任務都不是他親自完成的,而是由他的堂弟們吉公尺邦德完成 他有很多堂弟 詹姆斯已經厭倦了把乙個個任務分配給乙個個吉公尺,他向你求助。每個月,詹姆斯都會收到一些任務,根據他以前執行任務的經驗,他計算出了每個吉公尺完成每個任務的成功率,要求...