Ignacio is a famous mathematician, some time ago he was married with Dolly, a famous scientific, at that time they bought a huge piece of land that they would use to construct a national university, they chose the land with the following property: if someone walks straight from any place inside the land to any other place inside the land then all that path would be inside the land, that's because they wanted that people could go from any point of the university to another as fast as possible.

Sadly, today Ignacio and Dolly are getting divorced, so they need to divide the land in two parts, to be fair with this division Dolly will give to Ignacio a list consisting of many different pairs of corners of the land, because governmental laws only permit to divide a land using corners of that land. Then, after dolly makes the list Ignacio will choose one pair of corners from that list and then they will divide the land with a straight wall from one of the corners to the other, the area of this wall is zero. Finally, Dolly will take the part with the biggest area.

For example, the image below corresponds to a land with coordinates (0, 0), (1,-1), (3, -1), (4, 0), (4, 2), (3, 3), (1, 3) and (0, 2) in that order, then Dolly made a list with 3 options, for the first one she chose corners with indexes 2 and 5, for the second she chose corners 7 and 3 and for the last she chose corners 4 and 7. In each case the shaded area corresponds to the area that would correspond to Ignacio if he chooses that option from the list.

You are hired from Ignacio to help him see which is the maximum area possible of the land he can have.

Input

The first line of input contains 2 numbers n(3 ≤ n ≤ 105) and m(2 ≤ m ≤ 105) - the numbers of corners of the land and the number of pairs in the list of Dolly respectively

Next n lines follow, the i-th of these lines contains xi and yi ( - 108 ≤ xi, yi ≤ 108) - the i-th coordinate of a corner from the land.

Finally, m lines follow, the i-th of these lines contains pi and qi (1 ≤ pi, qi ≤ n, pi ≠ qi)
- the i-th pair of the corners in the list from dolly. It is guaranteed
that all pairs are different and that there are no 3 co-linear corners
in the land.

Output

Print a single number - the maximum area of the land that Ignacio could keep for himself.

You answer is considered correct, if its absolute or relative error does not exceed 10 - 4

Examples

Input
4 2
0 0
0 100
100 100
100 0
1 3
4 2
Output
5000.000000
Input
8 3
0 0
1 -1
3 -1
4 0
4 2
3 3
1 3
0 2
2 5
3 7
4 7
Output
7.000000

维护一下面积的前缀和即可;
注意多边形面积的公式:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 200005
#define inf 0x7fffffff
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-4
typedef pair<int, int> pii;
#define pi acos(-1.0)
//const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {
ll x = 0;
char c = getchar();
bool f = false;
while (!isdigit(c)) {
if (c == '-') f = true;
c = getchar();
}
while (isdigit(c)) {
x = (x << 1) + (x << 3) + (c ^ 48);
c = getchar();
}
return f ? -x : x;
} ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a%b);
}
int sqr(int x) { return x * x; } /*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) {
x = 1; y = 0; return a;
}
ans = exgcd(b, a%b, x, y);
ll t = x; x = y; y = t - a / b * y;
return ans;
}
*/ int n, m;
struct node {
double x, y;
}pot[maxn]; double pre[maxn];
int main() {
// ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++)rdlf(pot[i].x), rdlf(pot[i].y);
for (int i = 1; i < n; i++) {
pre[i] = pre[i - 1] + 1.0*(pot[i].x*pot[i + 1].y - pot[i + 1].x*pot[i].y);
}
double sum = fabs(pre[n - 1] - pot[1].x*pot[n].y + pot[n].x*pot[1].y) / 2.0;
double maxx = -1.0*inf;
while (m--) {
int x, y; rdint(x); rdint(y);
if (x > y)swap(x, y);
double sum1 = fabs(pre[y - 1] - pre[x - 1] - pot[x].x*pot[y].y + pot[y].x*pot[x].y) / 2.0;
maxx = max(maxx, min(sum1, sum - sum1));
}
printf("%.8lf\n", 1.0*maxx);
return 0;
}

Gym - 101845D 计算几何的更多相关文章

  1. Gym 101055A 计算几何,暴力

    http://codeforces.com/gym/101055/problem/A 题目:给定一些三维空间的点,要你找一个平面,能覆盖尽量多的点,只要求输出点数即可.n<=50 因为数据量小, ...

  2. Rasheda And The Zeriba Gym - 100283A  计算几何

    http://codeforces.com/gym/100283/problem/A 考虑到多边形是不稳定的,是可以变来变去的. 那么总是可以把每个点放到圆上. 所以只需要判断圆心角是不是小于等于36 ...

  3. Gym 101464C - 计算几何+二分(uva1463)

    不是很难,但是我觉得对代码能力的要求还是挺高的. 注意模块化. 因为是浮点数,所以二分用的很多很多. 参考 https://blog.csdn.net/njupt_lyy/article/detail ...

  4. Gym 100952J&&2015 HIAST Collegiate Programming Contest J. Polygons Intersection【计算几何求解两个凸多边形的相交面积板子题】

    J. Polygons Intersection time limit per test:2 seconds memory limit per test:64 megabytes input:stan ...

  5. Gym 101606L - Lounge Lizards - [计算几何+LIS]

    题目链接:https://codeforces.com/gym/101606/problem/L 题解: 在同一条线上的所有蜥蜴,他们的斜率都是相通的,换句话说可以直接通过斜率将蜥蜴分组. 每一组即代 ...

  6. 【计算几何】【二分图判定】Gym - 101485C - Cleaning Pipes

    题意:有n个水井,每个水井发出一些管线(都是线段),然后每条管线上最多只有一个水井.所有从不同的水井发出的管线的相交点都是清洁点(不存在清洁点是大于两条管线点的交点).你需要在某些管线上放出一些机器人 ...

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

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

  8. Gym 101917 E 简单计算几何,I 最大流

    题目链接 https://codeforces.com/gym/101917 E 题意:给定一个多边形(n个点),然后逆时针旋转A度,然后对多边形进行规约,每个点的x规约到[0,w]范围内,y规约到[ ...

  9. Gym - 100625G Getting Through 计算几何+并查集

    http://codeforces.com/gym/100625/attachments/download/3213/2013-benelux-algorithm-programming-contes ...

随机推荐

  1. #调整随机森林的参数(调整n_estimators随机森林中树的数量默认10个树,精度递增显著,但并不是越多越好),加上verbose=True,显示进程使用信息

    #调整随机森林的参数(调整n_estimators随机森林中树的数量默认10个树,精度递增显著) from sklearn import datasets X, y = datasets.make_c ...

  2. No result defined for action action.LoginAction and result success 问题解决

    转自:https://blog.csdn.net/dongzhout/article/details/43699699 搭建好SSH2框架,写一个简单的登陆功能,提交表单的时候遇到这个问题: 配置文件 ...

  3. Android APP使用系统签名

    Android M平台在写APP测试使用MediaRecoder通过AudioSource.VOICE_CALL来录制通话上下行音的时候,需要权限 <uses-permission androi ...

  4. Android Studio Build APK没有报错,但是Generate signed apk报错

    有时候 ,我们在调试APK,直接Build是可以正常生成,没有报错,但是当我们将自己的签名文件加上去,就会报错.一般情况下,我们可以在build.gradle中的android{}里面添加一个东西 l ...

  5. MyBatis总结七:动态sql和sql片段

    开发中,sql拼接很常见,所以说一下动态sql: 1 if 2 chose,when,otherwise 3 where,set 4 foreach 用法解析(现有一张users表 内有id user ...

  6. 第5章 选举模式和ZooKeeper的集群安装 5-2 单机伪分布式安装zookeeper集群

    先搭建伪分布式集群,再去搭建真分布式集群.有些的人的电脑内存.性能比较低,所以在搭建真实的一个分布式环境的话,可能会相对来说比较卡,所以两种都会做一下,首先会在单机上搭建一个集群.单机上的集群主要就是 ...

  7. php 中两种获得数据库中 数据条数的方法

    一种是传统的利用mysql_num_rows()来计算 $sql="select * from news"; $res=mysql_query($sql); $number=mys ...

  8. Struts2框架02 消息传递

    1 消息传递 浏览器和服务器之间的数据传递 2 服务器项浏览器发送数据 2.1 在控制器类中增加一个属性,该属性的值就是服务器需要向浏览器发送的数据 2.2 为该属性增加 get 方法 2.3 在处理 ...

  9. win10右击windows键没有反应解决方案(1707版本)

    按Win+R打开运行,输入“regedit”打开注册表编辑器. 2.在“HKEY_CLASSES_ROOT”主键下找到“linkfile”或者".lnkfile"字符串值项,在右侧 ...

  10. R: 自定义函数

    ################################################### 问题:自定义函数   18.4.29 自定义函数,其返回值是个问题,还有怎么让过程变量成为全局变 ...