博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4311 : 向量
阅读量:7256 次
发布时间:2019-06-29

本文共 1010 字,大约阅读时间需要 3 分钟。

考虑离线操作,求出每个向量存在的时间区间,用时间线段树来进行分治,在每个节点求出凸壳后,询问时在凸壳上三分答案。时间复杂度$O(n\log^2n)$。

 

#include
#include
typedef long long ll;const int N=200010,M=4000000;int n,m,i,op,x,y,g[524300],v[M],nxt[M],ed,t;ll ans[N];inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}struct P{int x,y;P(){}P(int _x,int _y){x=_x,y=_y;}}a[N],b[N],c[N],d[N],q[N];inline bool cmp(const P&a,const P&b){return a.x==b.x?a.y>b.y:a.x
>1; if(c<=mid)ins(x<<1,a,mid,c,d,p); if(d>mid)ins(x<<1|1,mid+1,b,c,d,p);}inline void ask(int x){ for(int l=0,r=t;l<=r;){ int len=(r-l)/3,m1=l+len,m2=r-len; ll s1=(ll)c[x].x*q[m1].x+(ll)c[x].y*q[m1].y,s2=(ll)c[x].x*q[m2].x+(ll)c[x].y*q[m2].y; if(s1>s2){ r=m2-1; if(ans[x]
>1; dfs(x<<1,a,mid),dfs(x<<1|1,mid+1,b); } int i,j=0; for(i=g[x];i;i=nxt[i])d[j++]=::a[v[i]]; if(!j)return; std::sort(d,d+j,cmp); for(q[t=0]=d[0],i=1;i

  

转载地址:http://yrpdm.baihongyu.com/

你可能感兴趣的文章
【实例总结】fixed定位元素内部滚动显示
查看>>
php——优化篇
查看>>
内容提供者
查看>>
tab页两个foreach同步刷新问题
查看>>
JDBC-自定义数据库工具类(DBService)
查看>>
5.24学习笔记
查看>>
使用ASP.NET MVC局部视图避免JS拼接HTML,编写易于维护的HTML页面
查看>>
电商网站架构案例(3)
查看>>
面向对象
查看>>
python3-函数
查看>>
Microsoft SQL Server Management Studio ------------------------------ 附加数据库 对于 服务器...
查看>>
IO(Properties、序列化流、打印流、CommonsIO)
查看>>
MySQL GTID复制
查看>>
【CT】递归语言的性质
查看>>
Android 4.4 根据uri获取路径的方法
查看>>
CodeForces 508C Anya and Ghosts 贪心
查看>>
最棒的10款MySQL GUI工具
查看>>
mysql 数据类型
查看>>
爬取xml数据之R
查看>>
Xdebug及PHPUnit安装Unknown remote channel: pear.symfony.com
查看>>