Luogu P4357K遠點對(寄蒜幾盒)

2022-05-01 00:54:09 字數 1836 閱讀 1803

題目鏈結

考慮旋轉卡殼求出乙個最遠點對之後刪掉其中乙個點,把該點到其餘所有點的距離存進堆裡……

最後堆輸出答案。

我的**只有在開o2的情況下才不會re。為啥????

#include#include

#include

#include

#include

#define maxn 300020

using

namespace

std;

inline

long

long

read()

while

(isdigit(ch))

return num*f;

}struct

point

}q[maxn],stack[maxn],d[maxn],sta;

inttop,cnt;

inline

long

long multi(point a,point b,point c)

inline

long

long caldis(point a,point b)

inline

int calcnxt(int a,int n)

inline

bool cmp(point a,point b)

long

long heap[maxn*100

],size;

inline

void push(long

long

x)

return;}

inline

long

long

pop()

return

ans;

}void prepare(int

from,int to,int

deep)

int now=from

;

for(int i=from;i<=to;++i)

if(q[i].yi;

sta=q[now];

swap(q[now],q[

from

]); sort(q+from+1,q+to+1

,cmp);

top=2

; stack[

1]=q[from]; stack[2]=q[from+1

];

for(int i=from+2;i<=to;++i)

stack[++top]=stack[1

]; now=1

;

int ansa=from,ansb=from

;

for(int i=1;ii)

if(caldis(stack[i],stack[now])>caldis(stack[ansa],stack[ansb]))

if(caldis(stack[i+1],stack[now])>caldis(stack[ansa],stack[ansb]))

}d[++cnt]=stack[ansa]; d[++cnt]=stack[ansb];

for(int i=from;i<=to;++i)

if(q[i]==stack[ansa])

for(int i=from+1;i<=to;++i)

}int

main();

for(int i=1;i<=m;++i) prepare(i,n,m);

printf(

"%lld\n

",pop());

return0;

}

435 無重疊區間

題目描述 給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大於它的起點。區間 1,2 和 2,3 的邊界相互 接觸 但沒有相互重疊。示例 1 輸入 1,2 2,3 3,4 1,3 輸出 1 解釋 移除 1,3 後,剩下的區間沒有重疊。示例 2 輸入 1...

435 無重疊區間

給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 可以認為區間的終點總是大於它的起點。區間 1,2 和 2,3 的邊界相互 接觸 但沒有相互重疊。示例 1 輸入 1,2 2,3 3,4 1,3 輸出 1 解釋 移除 1,3 後,剩下的區間沒有重疊。示例 2 輸入 1,2 1,...

435 無重疊區間

給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。注意 1.可以認為區間的終點總是大於它的起點。2.區間 1,2 和 2,3 的邊界相互 接觸 但沒有相互重疊。示例 1 輸入 1,2 2,3 3,4 1,3 輸出 1 解釋 移除 1,3 後,剩下的區間沒有重疊。示例 2 輸入 1,...