題目鏈結
考慮旋轉卡殼求出乙個最遠點對之後刪掉其中乙個點,把該點到其餘所有點的距離存進堆裡……
最後堆輸出答案。
我的**只有在開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,...