ZOJ 3511 不相交切切多边形 线段树求最大边数
题意:
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 不相交切切多边形 线段树求最大边数的更多相关文章
- 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 ...
- 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)
原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...
- UVA 11983 Weird Advertisement --线段树求矩形问题
题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...
- BNU 2418 Ultra-QuickSort (线段树求逆序对)
题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=2418 解题报告:就是给你n个数,然后让你求这个数列的逆序对是多少?题目中n的范围是n & ...
- hdu 1394 (线段树求逆序数)
<题目链接> 题意描述: 给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找 ...
- xdoj-1324 (区间离散化-线段树求区间最值)
思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i] 覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...
- 4163 hzwer与逆序对 (codevs + 权值线段树 + 求逆序对)
题目链接:http://codevs.cn/problem/4163/ 题目:
- poj2299 Ultra-QuickSort(线段树求逆序对)
Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...
- HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...
随机推荐
- exp导出出现:ORA-00904: "POLTYP": invalid identifier
相关文章: <exp导出出现:ORA-00904: : invalid identifier>:http://blog.itpub.net/23135684/viewspace-13 ...
- Ruby设计模式透析之 —— 适配器(Adapter)
转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/9400153 此为Java设计模式透析的拷贝版,专门为Ruby爱好者提供的,不熟悉R ...
- CentOS下几种软件安装方式
1.rpmRPM RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志, 但是其原始设计理念是开放式的,现在包括OpenLin ...
- 发布一款仿天猫产品放大镜JQuery插件
效果如下图: 1.原图 2.放大镜效果: 插件源码如下: /* * * JQUERY 简洁无极放大镜插件-zoomer * Author:盛世游侠 * QQ:418873053 * Date:2013 ...
- java Socket 长连接 心跳包 客户端 信息收发 demo
今天写了个socket的测试小程序,代码如下 import java.io.IOException; import java.io.InputStream; import java.io.Output ...
- JQUERY1.9学习笔记 之基本过滤器(六) 页眉选择器
页眉选择器jQuery( ":header" ) 描述:选择页眉的所有标签,如 h1,h2, h3 等. <!DOCTYPE html><html lang=&q ...
- CentOS 6.4 编译Open vSwitch2.0
1. 安装依赖软件 yum install automake openssl-devel rpmrebuild kernel-devel make redhat-rpm-config gcc redh ...
- angular.forEach
if($scope.jsList.length>0){ angular.forEach($scope.jsList,function(item){ if(item._id==jsid){ jsn ...
- Android json操作之取得一个对象
1:服务端返回的json数据格式如下: {"id":"1001","name":"zhangsan","sco ...
- Altium Design 中差分走线的设置
1.在原理图中,将要设置的差分对的网络名称的前缀取相同的名字,在前缀后面加后缀分别为_N 和_P,并且加上差分对指示.具体操作如下:2.在原理图界面下,单击 Place>>Directiv ...