要AB上侧下侧分开考虑,否则选到的四元组可能不合法

复习:树状数组求逆序对

int tree[NNN];
inline int lowbit(int x){return x&(-x);}
inline void update(int i){while(i<=tot){tree[i]+=1;i+=lowbit(i);}
}inline int query(int i){int res=0;while(i>0){res+=tree[i];i-=lowbit(i);}return res;
}
update(x),ans+=i-query(x);
/*OR*/
ans+=i-query(x)-1,update(x);

ACcode

#include<bits/stdc++.h>
#define re register
#define in Read()
using namespace std;
inline int in{int i=0,f=1;char ch;while(!isdigit(ch)&&ch!='-')ch=getchar();if(ch=='-')ch=getchar(),f=-1;while(isdigit(ch))i=(i<<1)+(i<<3)+ch-48,ch=getchar();return i*f;
}const int NNN=1e5+10;
const double eps=1e-7;
const double pi=3.1415;
int n,ans;
struct Point{double x,y;Point(){}Point(double _x,double _y){x=_x,y=_y;}inline void print(){printf("(%.5lf,%.5lf)\n",x,y);}friend inline Point operator + (const Point &u,const Point &v){return Point(u.x+v.x,u.y+v.y);}friend inline Point operator - (const Point &u,const Point &v){return Point(u.x-v.x,u.y-v.y);}friend inline Point operator * (const Point &u,const double &v){return Point(u.x*v,u.y*v);}friend inline Point operator / (const Point &u,const double &v){return Point(u.x/v,u.y*v);}friend inline double operator ^ (const Point &u,const Point &v){return u.x*v.y-u.y*v.x;}friend inline double operator % (const Point &u,const Point &v){return u.x*v.x+u.y*v.y;}}A,B,p[NNN];struct node{Point p;int id;
}now[NNN];
int tot;inline double dis(Point u,Point v){return sqrt((u-v)%(u-v));}
inline double angle(Point u,Point v,Point w){return acos(((u-v)%(w-v))/(dis(u,v)*dis(w,v)));}inline bool cmp1(const node &u,const node &v){return ((u.p-A)^(v.p-A))<0;}
inline bool cmp2(const node &u,const node &v){return ((u.p-B)^(v.p-B))<0;}
inline bool cmp3(const node &u,const node &v){return ((u.p-A)^(v.p-A))>0;}
inline bool cmp4(const node &u,const node &v){return ((u.p-B)^(v.p-B))>0;}int tree[NNN];
inline int lowbit(int x){return x&(-x);}
inline void update(int i){while(i<=tot){tree[i]+=1;i+=lowbit(i);}
}inline int query(int i){int res=0;while(i>0){res+=tree[i];i-=lowbit(i);}return res;
}inline void upward(){memset(tree,0,sizeof(tree));tot=0;for(re int i=1;i<=n;++i)if(((B-A)^(p[i]-A))>0)now[++tot].p=p[i];sort(now+1,now+tot+1,cmp1);for(re int i=1;i<=tot;++i)now[i].id=i;sort(now+1,now+tot+1,cmp2);for(re int i=1;i<=tot;++i)update(now[i].id),ans+=i-query(now[i].id);
}inline void downward(){memset(tree,0,sizeof(tree));tot=0;for(re int i=1;i<=n;++i)if(((B-A)^(p[i]-A))<0)now[++tot].p=p[i];sort(now+1,now+tot+1,cmp3);for(re int i=1;i<=tot;++i)now[i].id=i;sort(now+1,now+tot+1,cmp4);for(re int i=1;i<=tot;++i)update(now[i].id),ans+=i-query(now[i].id);
}int main(){n=in;A.x=(double)in,A.y=(double)in;B.x=(double)in,B.y=(double)in;for(re int i=1;i<=n;++i)p[i].x=(double)in,p[i].y=(double)in;upward();downward();printf("%d\n",ans);return 0;
}

[计算几何]Last Stardust相关推荐

  1. AcWing 2984. 线段 / POJ3304(计算几何、常用技巧转换)

    常用技巧转换,寻找一个直线旋转 我们发现如果可以找到一个直线与所有的线段都相交,那么我们做一个垂直这个直线的垂线,所有的线段的投影一定都交于这个直线与垂线的垂足处,我们可以很轻松地画图验证这一定理. ...

  2. 模板 -计算几何注意事项

    整理的算法模板合集: ACM模板 目录 计算误差 解决方案 : 误差判别法 解决方案:化浮为整 注意负零 注意反三角函数的值域 计算几何常用开头模板 在写计算几何的题目的时候一般习惯数组从0开始(至少 ...

  3. 二维几何基础大合集!《计算几何全家桶(一)》(基础运算、点、线、多边形、圆、网格)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 目录 1.基本运算 1.1 判断正负函数(sgn) 1.2 点积(数量积.内积)(Dot) 1.3 向量积 ...

  4. 【第一道计算几何题】 UVA11178 Morley‘s Theorem (二维几何,旋转直线求求交点)

    整理的算法模板合集: ACM模板 要求D点我们只需要把直线BC向左旋转a/3,向右旋转b/3得到两直线求交点即可. 秒啊秒啊 解锁技能树--计算几何,终于能加一个计算几何版块了 #include< ...

  5. 【计算几何】【分类讨论】Gym - 101173C - Convex Contour

    注意等边三角形的上顶点是卡不到边界上的. 于是整个凸包分成三部分:左边的连续的三角形.中间的.右边的连续的三角形. 套个计算几何板子求个三角形顶点到圆的切线.三角形顶点到正方形左上角距离啥的就行了,分 ...

  6. hdu 1174:爆头(计算几何,三维叉积求点到线的距离)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  7. 也许是史上最不良心的低阶计算几何讲解和习题集??

    -3.在此声明: 笔者极端厌恶计算几何,以至于直到今天之前都只打过几个计算几何的模板~~~~~ 不过鉴于今年是18年,所以感觉SD很有可能考计算几何(18年是什么理由啊喂) 于是滚过来整理计算几何的资 ...

  8. 计算几何算法概览 (一)

    矢量的概念: 如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment).如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2. 矢 ...

  9. sdut 2153:Clockwise(第一届山东省省赛原题,计算几何+DP)

    Clockwise Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Saya have a long necklace with ...

最新文章

  1. 奇葩错误 -- modelsim波形显示no data(全X)
  2. AE实现不同图层的合并C#代码
  3. 命令行里给个注释,AI就能自动生成代码
  4. IntelliSense: const char * 类型的实参与 LPCTSTR 类型的形参不兼容
  5. 【动态顺序表】 c语言的动态顺序表
  6. ta是什么职位_想好了吗~你为什么来博智林
  7. SAP Commerce Cloud 切换 delivery mode 会触发 promotionresult 的删除
  8. phpmyadmin在nginx环境下配置错误
  9. DLL系列6.函数转发器
  10. Zoho中国:如何利用好免费版CRM
  11. ​24小时企业级微信小程序全套开发视频教程
  12. OPNsense用户手册-缓存代理
  13. 什么是ECS框架?讲解 + 实战带你入门ECS框架
  14. maven项目 The superclass javax.servlet.http.HttpServlet was not found on the Jav
  15. C,D,Go,Rust,Nim,Zig,V,Julia,Py,C#,Kotlin 11语回文数大战!仅供娱乐参考!
  16. linux添加javahome
  17. 关于微信小程序本机调试可以运行,真机无法运行的问题
  18. 钱多多软件制作第五天
  19. 【亲测有效】如何解决Hadoop运行jar包 报错Exception in thread “main“ java.lang.ClassNotFoundException: /input
  20. FPGA和CPLD芯片选型介绍(一)

热门文章

  1. 什么是模型?开发软件为什么要建模?
  2. Android 保存视频以及读取视频
  3. mysql 导出指定分隔符_mysql 导出行数据到txt文件,指定字符分割
  4. python 经纬度计算相关
  5. 奶制品生产与销售matlab,奶制品生产和销售
  6. Java集合框架全解
  7. 看完这篇文章APP关键词覆盖增加70000|互联网行业公会
  8. 华为机试真题 C++ 实现【最大化控制资源成本】【100%通过率】【2022.11 Q4 新题】
  9. CISCO2600路由器入门3
  10. C语言候老师,两本留言册背后的C语言老师