cdq分治的題目.
我們發現題目要我們求的\(|a_x-b_x|+|a_y-b_y|\)的絕對值號比較噁心.
試想一下怎麼去掉
如果所有的點都在我們當前求的點的左下方(就是只考慮在他坐下方的點對他的貢獻). 我們怎麼求?
那麼就要我們求\(min\)(假設\(a\)為詢問的點)
那麼其實就是讓我們求\(a_x+a_y-max(b_x+b_y)\)
也因為要滿足左下角的限制
其實就是滿足
\(b_x<=a_x\)同時滿足\(b_y<=a_y\)中最大的\(b_x+b_y\)
這個是可以直接cdq的
但是我們只考慮了左下方的點對他的貢獻,很明顯,這是不夠的
那麼我們就想辦法依次將左上,右上,右下全部轉化為左下
就是通過同最大值域的加減來改變他們的左邊但不改變相對關係
注意常數就好了
另外,這種情況下歸併排序的時間複雜度比快排優秀太多了
#includeusing namespace std;
const int n = 6e5 + 3;
const int m = 1e6 + 3;
const int inf = 2e9;
int n,m;
int max_x,max_y;
int ans[n];
struct qq[n],p[n],h[n];
q g[n];
struct bit
inline int query(int x)
inline void clear(int x)
}t;int xx[n],yy[n];
inline bool cmp1(q x,q y)
inline bool cmp2(q x,q y)
inline int read()
while(isdigit(ch))
if(flag) x = -x;
return x;
}inline void solve(int l,int r)
for(int i = l;i < now;++i) if(p[i].type == 1) t.clear(p[i].yi);
while(ll <= mid && rr <= r)
while(ll <= mid) h[++nn] = p[ll++];
while(rr <= r) h[++nn] = p[rr++];
for(int i = l;i <= r;++i) p[i] = h[i];
}inline void del()
for(int i = 1;i <= m;++i) p[i] = g[i];
}int main()
for(int i = 1;i <= m;++i)
n += m;
for(int i = 1;i <= n;++i) p[i] = q[i];
for(int i = 1;i <= n;++i) ans[i] = inf;
max_y = max(max_x,max_y) + 1;
solve(1,n);
for(int i = 1;i <= n;++i) p[i] = q[i],p[i].xi = max_y - p[i].xi;
solve(1,n);
for(int i = 1;i <= n;++i) p[i] = q[i],p[i].yi = max_y - p[i].yi;
solve(1,n);
for(int i = 1;i <= n;++i) p[i] = q[i],p[i].xi = max_y - p[i].xi,p[i].yi = max_y - p[i].yi;
solve(1,n);
for(int i = 1;i <= n;++i) if(ans[i] != inf) printf("%d\n",ans[i]);
return 0;
}
bzoj2648 sjy擺棋子 kd樹
這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上乙個黑色棋子,要麼放上乙個白色棋子,如果是白色棋子,他會找出距離這個白色棋子最近的黑色棋子。此處的距離是 曼哈頓距離 即 x1 x2 y1 y2 現在給出n 500000個初始棋子。和m 500000個操作。對於每個...
bzoj2648 kd樹 SJY擺棋子
2648 sjy擺棋子 time limit 20 sec memory limit 128 mb submit 4914 solved 1688 submit status discuss description 這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上...
bzoj2648 SJY擺棋子 k d樹
這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上乙個黑色棋子,要麼放上乙個白色棋子,如果是白色棋子,他會找出距離這個白色棋子最近的黑色棋子。此處的距離是 曼哈頓距離 即 x1 x2 y1 y2 現在給出n 500000個初始棋子。和m 500000個操作。對於每個...