题面

传送门

题解

好眼熟丫……

一月月赛最后一题……,代码都不用改……

  1. //minamoto
  2. #include<bits/stdc++.h>
  3. #define R register
  4. #define fi first
  5. #define se second
  6. #define ll long long
  7. #define pb push_back
  8. #define IT vector<pair<node,int> >::iterator
  9. #define inline __inline__ __attribute__((always_inline))
  10. #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
  11. #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
  12. #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
  13. template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
  14. using namespace std;
  15. char buf[1<<21],*p1=buf,*p2=buf;
  16. inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
  17. int read(){
  18. R int res,f=1;R char ch;
  19. while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
  20. for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
  21. return res*f;
  22. }
  23. char sr[1<<21],z[20];int C=-1,Z=0;
  24. inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
  25. void print(R ll x){
  26. if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;
  27. while(z[++Z]=x%10+48,x/=10);
  28. while(sr[++C]=z[Z],--Z);sr[++C]='\n';
  29. }
  30. const int N=200005,S=15,L=15005;
  31. struct node{
  32. int x,y;
  33. inline node(){}
  34. inline node(R int xx,R int yy):x(xx),y(yy){}
  35. inline node operator +(const node &b)const{return node(x+b.x,y+b.y);}
  36. inline node operator -(const node &b)const{return node(x-b.x,y-b.y);}
  37. inline ll operator *(const node &b)const{return 1ll*x*b.y-1ll*y*b.x;}
  38. inline bool operator <(const node &b)const{return x<b.x||x==b.x&&y<b.y;}
  39. inline ll norm(){return 1ll*x*x+1ll*y*y;}
  40. }p[N];
  41. struct Convex{
  42. vector<node>up,dw;
  43. inline Convex(){}
  44. inline Convex(const vector<node> &b){up=b,dw=b,build();}
  45. Convex operator +(const Convex &b)const{
  46. Convex c;
  47. c.up.resize(up.size()+b.up.size());
  48. merge(up.begin(),up.end(),b.up.begin(),b.up.end(),c.up.begin());
  49. c.dw.resize(dw.size()+b.dw.size());
  50. merge(dw.begin(),dw.end(),b.dw.begin(),b.dw.end(),c.dw.begin());
  51. c.build();
  52. return c;
  53. }
  54. void build(){
  55. int n=up.size(),m=0;
  56. fp(i,0,n-1){
  57. while(m>1&&(up[i]-up[m-2])*(up[m-1]-up[m-2])<=0)--m;
  58. up[m++]=up[i];
  59. }
  60. up.resize(m);
  61. n=dw.size(),m=0;
  62. fp(i,0,n-1){
  63. while(m>1&&(dw[i]-dw[m-2])*(dw[m-1]-dw[m-2])>=0)--m;
  64. dw[m++]=dw[i];
  65. }
  66. dw.resize(m);
  67. }
  68. ll solve(){
  69. vector<node>st=dw;
  70. fd(i,up.size()-2,0)st.pb(up[i]);
  71. int n=st.size()-1;ll res=0;
  72. for(R int i=0,j=1;i<n;++i){
  73. while((st[j+1]-st[i]).norm()>(st[j]-st[i]).norm())j=(j+1)%n;
  74. cmax(res,(st[j]-st[i]).norm()),cmax(res,(st[j+1]-st[i+1]).norm());
  75. }
  76. return res;
  77. }
  78. }st[L][17];
  79. int n,m,Log[L],rt[N];vector<pair<node,int> >c[L];
  80. Convex rmq(int l,int r){
  81. if(l>r)return Convex();
  82. int k=Log[r-l+1];
  83. return st[l][k]+st[r-(1<<k)+1][k];
  84. }
  85. int main(){
  86. // freopen("testdata.in","r",stdin);
  87. // freopen("testdata.out","w",stdout);
  88. n=read(),m=(n-1)/S+1;
  89. fp(i,1,n)p[i].x=read(),p[i].y=read(),rt[i]=(i-1)/S+1;
  90. fp(i,1,m){
  91. int l=(i-1)*S+1,r=min(n,i*S);
  92. fp(j,l,r)c[i].pb(make_pair(p[j],j));
  93. sort(c[i].begin(),c[i].end());
  94. vector<node>point;
  95. for(IT it=c[i].begin();it!=c[i].end();++it)point.pb(it->fi);
  96. st[i][0]=Convex(point);
  97. }
  98. fp(i,2,m)Log[i]=Log[i>>1]+1;
  99. fp(j,1,Log[m])fp(i,1,m-(1<<j)+1)st[i][j]=st[i][j-1]+st[i+(1<<(j-1))][j-1];
  100. int q=read(),l,r;
  101. while(q--){
  102. l=read(),r=read();
  103. if(rt[l]==rt[r]){
  104. vector<node>point;
  105. for(IT it=c[rt[l]].begin();it!=c[rt[l]].end();++it)
  106. if(it->se>=l&&it->se<=r)point.pb(it->fi);
  107. Convex res(point);
  108. print(res.solve());
  109. }else{
  110. vector<node>pointl,pointr;
  111. for(IT it=c[rt[l]].begin();it!=c[rt[l]].end();++it)
  112. if(it->se>=l&&it->se<=r)pointl.pb(it->fi);
  113. for(IT it=c[rt[r]].begin();it!=c[rt[r]].end();++it)
  114. if(it->se>=l&&it->se<=r)pointr.pb(it->fi);
  115. Convex res=rmq(rt[l]+1,rt[r]-1)+Convex(pointl)+Convex(pointr);
  116. print(res.solve());
  117. }
  118. }
  119. return Ot(),0;
  120. }

Code Chef DARTSEGM(计算几何+凸包)的更多相关文章

  1. Code Chef GEOCHEAT(凸包+旋转卡壳+随机化)

    题面 传送门 题解 以下记\(S_i=\{1,2,3,...,i\}\) 我们先用凸包+旋转卡壳求出直径的长度,并记直径的两个端点为\(i,j\)(如果有多条直径随机取两个端点) 因为这个序列被\(r ...

  2. Code Chef TSUM2(动态凸包+点分治)

    题面 传送门 题解 真是毒瘤随机化算法居然一分都不给 首先这种树上的题目一般想到的都是点分 我们考虑如何统计经过当前点的路径的贡献,设当前点\(u\)在序列中是第\(c\)个,那么一条路径的贡献就是 ...

  3. Code Chef MINPOLY(计算几何+dp)

    题面 传送门 题解 我们枚举这个凸多边形\(y\)坐标最小的点\(p_i\),然后对于所有\(y\)坐标大于等于它的点极角排序 我们预处理出\(s_{j,k}\)表示三角形\(p_i,p_j,p_k\ ...

  4. Code Chef IMPO(计算几何+扫描线+积分)

    题面 传送门 前置芝士 扫描线,积分求面积 题解 我怎么老是忘了积分可以求面积-- 首先,这两个投影的最小的\(x\)坐标和最大的\(x\)坐标必须相等,否则肯定无解 我们考虑一种方法,枚举\(x\) ...

  5. 【BZOJ-1069】最大土地面积 计算几何 + 凸包 + 旋转卡壳

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2707  Solved: 1053[Submit][Sta ...

  6. 计算几何---凸包问题(Graham/Andrew Scan )

    概念 凸包(Convex Hull)是一个计算几何(图形学)中的概念.用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有点的.严谨的定义和相关概念参 ...

  7. 计算几何-凸包-toleft test

    toLeftTest toLeftTest是判断一个点是否在有向直线左侧的算法. 当点s位于向量pq左侧时,toLeftTest返回true.当点s位于向量pq右侧时,toLeftTest返回fals ...

  8. 计算几何-凸包算法 Python实现与Matlab动画演示

    凸包算法是计算几何中的最经典问题之一了.给定一个点集,计算其凸包.凸包是什么就不罗嗦了 本文给出了<计算几何——算法与应用>中一书所列凸包算法的Python实现和Matlab实现,并给出了 ...

  9. uva 10652 Board Wrapping (计算几何-凸包)

    Problem B Board Wrapping Input: standard input Output: standard output Time Limit: 2 seconds The sma ...

随机推荐

  1. MD5加密获得文件的MD5码

    哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串.加密哈希函数有这样一个属性:在计算不大可能找到散列为相同的值的两个不同的输入:也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配 ...

  2. 在探http请求

    参考:https://itbilu.com/other/relate/Ny2IWC3N-.html Cookie和Session都是为了解决HTTP协议的无状态问题,存储HTTP通讯中客户端与服务器之 ...

  3. wcf服务契约继承

    a. 服务端 .契约 使用了继承 using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked ...

  4. 跨页传值c#

    Application (4)URL地址中的参数 (5)通过隐藏字段来传递数据 (6)Server.Transfer (7)通过序列化对象 (8)........ 下面就分别一一介绍: (1)使用Se ...

  5. 2018.06.29 洛谷P1505 [国家集训队]旅游(树链剖分)

    旅游 题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有 ...

  6. js 获取时间不能大于当前系统时间

    var dataDate=$.trim($("#dataDate").val()); if(dataDate.length==0){ $("#dataDateTip&qu ...

  7. python面向对象-3类的静态方法和类方法

    还是以上次的洗衣机例子: class Washer: company='ZBL' def __init__(self,water=10,scour=2): self._water=water #不想让 ...

  8. Field '***********' doesn't have a default value

    今天做配置文件一直报这个错误: 原因是主键是integer类型,没有设置自增模式,所以会出现这个问题,是表的结构问题.更改用navicat

  9. (二)swagger-springmvc

    如何入门 1. 我在 http://mvnrepository.com/ 上搜索 swagger-springmvc 2. 我找到一个具体版本 http://mvnrepository.com/art ...

  10. Shiro 登录页面的几个固定字段

    http://shiro.apache.org/webapp-tutorial.html Step 3b: Add a login page Since Step 3a enabled login a ...