题意:

n多凸边形 m刀 (把n切m刀,问切完后的图形中 最多的边数 是多少)

切a点-b点

数据保证切的刀不会相交

思路:

2点之间的剩余点数就是边数,

把a-b距离 近 排序

切完一刀就统计一下切出来的蛋糕的边数,并舍弃

[a,b] 表示a,b 点间剩下的点数(就是边数)

先计算[a,b]的点数, 然后删除(a,b) 区间的点 (注意删除的是(a,b) ,所以实际操作是 删除[a,b] )

最后要特殊算下 剩下那块的(因为那块没有切)

#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
#include<algorithm>
#include<set>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <math.h>
#include <queue>
#define N 10100
#define M 2000100
#define inf64 0x7ffffff
#define inf 1073741824
#define ll int
#define L(x) x<<1
#define R(x) x<<1|1
#define Mid(x,y) (x+y)>>1
using namespace std;
inline ll Min(ll a,ll b){return a>b?b:a;}
inline ll Max(ll a,ll b){return a>b?a:b;} struct Point{
int x,y,dis; }p[N];
bool cmp(Point a,Point b){
return a.dis<b.dis;
}
struct node{
int l,r;
ll sum;
}tree[N*4]; void pushup(int id){
tree[id].sum = tree[R(id)].sum + tree[L(id)].sum;
} void build(int l,int r,int id){
tree[id].l = l, tree[id].r = r;
tree[id].sum = r - l + 1;
if(l == r)return ;
int mid = Mid(l,r);
build( l, mid, L(id));
build( mid+1, r, R(id)); } void updata(int l, int r,int id){
if(l == tree[id].l && tree[id].r == r)
{ tree[id].sum = 0; return ;} int mid=Mid(tree[id].l, tree[id].r);
if(r <= mid)updata(l, r, L(id));
else if(mid < l) updata(l, r, R(id));
else
{
updata(l, mid, L(id));
updata(mid+1, r, R(id));
}
pushup(id);
}
int query(int l, int r, int id){
if(tree[id].sum==0)return 0;
if( tree[id].l == tree[id].r)return tree[id].sum;
int mid=Mid(tree[id].l, tree[id].r); if(r <= mid)
return query(l, r, L(id));
if(mid < l )
return query(l, r, R(id)); return query(l, mid, L(id)) + query(mid+1, r, R(id));
} int main(){
int n, m, i,temp;
while(~scanf("%d %d",&n,&m)){ for(i=1;i<=m;i++){
scanf("%d %d",&p[i].x,&p[i].y);
if(p[i].x>p[i].y)
temp=p[i].x, p[i].x=p[i].y, p[i].y=temp;
p[i].dis=p[i].y-p[i].x;
} sort(p+1, p+m+1, cmp); build(1,n,1); int ans=0;
for(i=1;i<=m;i++){ ans=Max(ans, query(p[i].x, p[i].y, 1));
updata(p[i].x+1, p[i].y-1, 1); }
ans=Max(ans, query(1,n,1));
printf("%d\n",ans); }
return 0;
} /*
6 3
1 5
1 4
1 3 ans:
3
*/

ZOJ 3511 不相交切切多边形 线段树求最大边数的更多相关文章

  1. Codeforces VK Cup 2015 - Qualification Round 1 D. Closest Equals 离线线段树 求区间相同数的最小距离

    D. Closest Equals Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/prob ...

  2. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  3. UVA 11983 Weird Advertisement --线段树求矩形问题

    题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...

  4. BNU 2418 Ultra-QuickSort (线段树求逆序对)

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=2418 解题报告:就是给你n个数,然后让你求这个数列的逆序对是多少?题目中n的范围是n & ...

  5. hdu 1394 (线段树求逆序数)

    <题目链接> 题意描述: 给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找 ...

  6. xdoj-1324 (区间离散化-线段树求区间最值)

    思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i]  覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...

  7. 4163 hzwer与逆序对 (codevs + 权值线段树 + 求逆序对)

    题目链接:http://codevs.cn/problem/4163/ 题目:

  8. poj2299 Ultra-QuickSort(线段树求逆序对)

    Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...

  9. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

    链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...

随机推荐

  1. HTML中<b>标签和<strong>便签的区别

    最近碰到的问题,自己写的时候因为<b>标签比较简短偶尔使用,看到别人有使用<strong>标签的,本人不懂区别,在网上找的别人的东西,觉得很有道理,跟大家分享看看~~ 链接:h ...

  2. 神器-Sublime Text 3 代码编辑器安装与使用

    一.软件获取 1.软件下载地址:http://www.sublimetext.com/3. 2.注册机和汉化下载:http://files.cnblogs.com/files/1312mn/subli ...

  3. AIDL Service

    开发AIDL服务的步骤 AIDL(Android Interface Definition Language)是Service的一种重要应用,允许一个应用程序访问另一个应用程序中的对象. 建立AIDL ...

  4. 2013中国大数据技术大会——BDTC2013

    阿里飞天平台总架构师唐洪分享了飞天开放平台. 飞天平台特点:同时支持在线和离线应用:安全控制:分布式部署,监控和诊断:无单点故障,可用性99.9%:数据3副本,数据可靠性“10个9”. 阿里飞天平台总 ...

  5. JS浏览器关闭时清空cookie

    function addCookie(objName,objValue,objHours){    var str = objName + "=" + escape(objValu ...

  6. Oracle数据库之PL/SQL流程控制语句

    Oracle数据库之PL/SQL流程控制语句 在任何计算机编程语言(如C,Java,C#等)都有各种流程控制语句,同样,在PL/SQL中也存在这样的流程控制结构. 几种常见的流程控制结构: 一.条件结 ...

  7. jquery中的replaceWith()和html()有什么区别?

    区别在于,html()会替换指定元素内部的HTML,而replaceWith()会替换元素本身及其内部的HTML. 例子: 1 <div id="myid" /> 1 ...

  8. jquery在不同浏览器获取文件路径出现问题!

    <input type="file" name="file" id="file1" src=""/> < ...

  9. C#中HashTable和快速排序的用法

    题目主要是写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来.   自从周四拿到题目以后,发现又要用到万恶的数据结构了,不得不说这是我的短板,所有上周20号到 ...

  10. JS版本网站资源状态检测

    Title:JS版本网站资源状态检测  --2012-08-28 14:08 前几天需要一个网站状态检测的东东,后面写了个蹩脚的JS版本,里面用到了以前没用过的东西,在这里记下来,其实批处理加curl ...