BZOJ4071 Apio2015 巴鄰旁之橋

2021-12-29 16:27:15 字數 826 閱讀 5121

首先對於家和公司在同一側的預處理掉,這樣就只剩家和公司不在同一側的情況了。

if(k==1)ans=∑abs(x-pos)+abs(y-pos);注意到與x,y是否在兩側無關,所以用經典的中位數處理思想sort一遍取中位數貪心即可。

else

好久不寫splay,練習了一發…>_

#include

#include

#include

#include

#define ll long long

//by:mirrorgray

using namespace std;

const int n=211111,inf=0x3f3f3f3f;

struct node

bool operator =d)return nxt(sp[tr].l,d,tr);

else return nxt(sp[tr].r,d,ret);

}int kth(int tr,int k)

void insert(int d)

sp[t2].l=++cnt;

sp[cnt].d=d;sp[cnt].fa=t2;sp[cnt].gs=1;

up(cnt);up(t2);up(t1);

}void del(int d)

sp[t2].l=0;

up(t2);up(t1);

}ll q(){

ll ret=0;

int tr=kth(root,sp[root].size>>1);

splay(tr,0);int l=sp[tr].l,r=sp[tr].r;

// cout<

BZOJ4071 APIO2015 八鄰旁之橋

bzoj4071 apio2015 八鄰旁之橋 這個題也變成了許可權題,不是很懂為什麼。反正沒錢氪金。這裡附上洛谷的題面 洛谷p3644 apio2015 八鄰旁之橋 一條東西走向的穆西河將巴鄰旁市一分為二,分割成了區域 aa 和區域 bb。每一塊區域沿著河岸都建了恰好 1000000001 棟的建...

4071 Apio2015 巴鄰旁之橋

一條東西走向的穆西河將巴鄰旁市一分為二,分割成了區域 a 和區域 b。每一塊區域沿著河岸都建了恰好 1000000001 棟的建築,每條岸邊的建築都從 0 編號到 1000000000。相鄰的每對建築相隔 1 個單位距離,河的寬度也是 1 個單位長度。區域 a 中的 i 號建築物恰好與區域 b 中的...

BZOJ 4071 巴鄰旁之橋

bzoj 4071傳送門 首先算出能提前算的貢獻 k 1 肯定選中間的點,小學數學 k 2 對於每對 x,y 一定選離 x y 2 近的橋 也就是說將 x,y 按 x y 2 的值排序後一定恰有乙個分割點使得兩邊選擇不同的橋!考慮如何如何快速列舉所有分割點時的答案 需要支援插入 刪除 求中位數及兩邊...