bzoj2716
来源:互联网 发布:淘宝联盟快速升级 编辑:程序博客网 时间:2024/06/06 10:40
mdzz数据范围看错了
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;typedef long long LL;inline int read(){ int x=0;bool f=0;char c=getchar(); for (;c<'0'||c>'9';c=getchar()) f=c=='-'?1:0; for (;c>='0'&&c<='9';c=getchar()) x=x*10+c-'0'; return f?-x:x;}const int N=500010,M=1000010,oo=0x3f3f3f3f;int n,m,q=0,maxl=0,ans[N],ss[M];struct na{ int x,y,id,t;}e[N<<1],e1[N<<1],e2[N<<1];inline bool cmp(const na &a,const na &b) { if (a.y!=b.y) return a.y<b.y; return a.t<b.t;} inline void update1(int x,int a) //维护前缀和{ for (;x<=maxl;x+=x&-x) ss[x]=min(ss[x],a);}inline int query1(int x){ int rec=oo; for (;x;x-=x&-x) rec=min(rec,ss[x]); return rec;}inline void recover1(int x){ for (;x<=maxl;x+=x&-x) ss[x]=oo;} inline void update2(int x,int a) //维护后缀和{ for (;x;x-=x&-x) ss[x]=min(ss[x],a);}inline int query2(int x){ int rec=oo; for (;x<=maxl;x+=x&-x) rec=min(rec,ss[x]); return rec;}inline void recover2(int x){ for (;x;x-=x&-x) ss[x]=oo;} void solve(int hd,int tl,int l,int r){ if (l>=r||hd>=tl) return; int mid=l+r>>1; for (int i=hd;i<=tl;i++) { if (e[i].t<=mid&&!e[i].id) update1(e[i].x,-e[i].x-e[i].y); if (e[i].t>mid&&e[i].id) ans[e[i].id]=min(ans[e[i].id],e[i].x+e[i].y+query1(e[i].x)); } for (int i=hd;i<=tl;i++) if (e[i].t<=mid&&!e[i].id) recover1(e[i].x); for (int i=hd;i<=tl;i++) { if (e[i].t<=mid&&!e[i].id) update2(e[i].x,e[i].x-e[i].y); if (e[i].t>mid&&e[i].id) ans[e[i].id]=min(ans[e[i].id],-e[i].x+e[i].y+query2(e[i].x)); } for (int i=hd;i<=tl;i++) if (e[i].t<=mid&&!e[i].id) recover2(e[i].x); for (int i=tl;i>=hd;i--) { if (e[i].t<=mid&&!e[i].id) update1(e[i].x,-e[i].x+e[i].y); if (e[i].t>mid&&e[i].id) ans[e[i].id]=min(ans[e[i].id],e[i].x-e[i].y+query1(e[i].x)); } for (int i=tl;i>=hd;i--) if (e[i].t<=mid&&!e[i].id) recover1(e[i].x); for (int i=tl;i>=hd;i--) { if (e[i].t<=mid&&!e[i].id) update2(e[i].x,e[i].x+e[i].y); if (e[i].t>mid&&e[i].id) ans[e[i].id]=min(ans[e[i].id],-e[i].x-e[i].y+query2(e[i].x)); } for (int i=tl;i>=hd;i--) if (e[i].t<=mid&&!e[i].id) recover2(e[i].x); int l1=0,l2=0,lp=hd; for (int i=hd;i<=tl;i++) if (e[i].t<=mid) e1[++l1]=e[i]; else e2[++l2]=e[i]; for (int i=1;i<=l1;i++) e[lp++]=e1[i]; for (int i=1;i<=l2;i++) e[lp++]=e2[i]; solve(hd,hd+l1-1,l,mid); solve(hd+l1,tl,mid+1,r);} int main(){ memset(ss,0x3f,sizeof ss); n=read();m=read(); for (int i=1;i<=n;i++) maxl=max(maxl,e[i].x=read()+1),e[i].y=read()+1,e[i].t=i; for (int i=n+1;i<=n+m;i++) { if (read()==2) e[i].id=++q,ans[q]=oo; maxl=max(maxl,e[i].x=read()+1),e[i].y=read()+1,e[i].t=i; } sort(e+1,e+n+m+1,cmp); solve(1,n+m,1,n+m); for (int i=1;i<=q;i++) printf("%d\n",ans[i]); return 0;}
0 0
- bzoj2716
- 【Violet3】【BZOJ2716】天使玩偶
- 【BZOJ2716/2648】SJY摆棋子
- bzoj2716: [Violet 3]天使玩偶
- [BZOJ2716][Violet 3]天使玩偶 && kdtree
- [BZOJ2648]=[BZOJ2716]SJY摆棋子
- [BZOJ2716][天使玩偶angel][CDQ分治]
- [KDTree] [BZOJ2716] [Violet 3] 天使玩偶
- bzoj2716 [ Violet 3 ] --cdq分治+树状数组
- bzoj2716 [Violet 3]天使玩偶(KDtree)
- [BZOJ2716][Violet 3]天使玩偶(cdq分治+bit)
- KD_Tree 【bzoj2648 && bzoj2716】SJY摆棋子 && [voilet 3] 天使玩偶
- [BZOJ2716][Violet 3]天使玩偶 CDQ分治+树状数组
- BZOJ2716: [Violet 3]天使玩偶(CDQ分治)
- bzoj2716 [Violet 3]天使玩偶(CDQ分治)
- 【bzoj2648&bzoj2716】[Violet 3]天使玩偶&SJY摆棋子【kd树】
- 文章标题 CSU 1756 :Prime
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- 关于canvas全屏的问题
- 利用HTML5的一个重要特性 —— DeviceOrientation来实现手机网站上的摇一摇功能
- 一些C++笔记
- bzoj2716
- 今天是第一天学C语言,我希望以后我会感谢这个第一天
- 线性方程组
- MyBatis学习总结(一)——MyBatis快速入门
- 知识库--WebappLoader(47)
- 驱动中的file、inode、cdev对象的联系
- [Mac OS X] 如何解决 “dtrace cannot control executables signed with restricted entitlements”?
- 重构-改善既有代码的设计读书笔记(八)
- [源码解析]HashMap和HashTable的区别(源码分析解读)