题意:

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
*/

最新文章

  1. css3 背景渐变
  2. ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码
  3. JQuery validate验证 自定义
  4. C# 基础(6)--Winform
  5. p168习题
  6. 随机删除数据库N条记录
  7. 用原生JS写移动动画案例及实际应用
  8. 刚开始学HTML自己做的,求大神些多多指教。
  9. dreamvc框架(三),dispartcher做了些什么
  10. 关于JS 的cookie 操作 与 json 的数据结构 问题
  11. HihoCoder - 1498 Diligent Robots
  12. orb slam2 双目摄像头
  13. php artisan 命令列表
  14. Mac系统下编译支持Android平台的最新X264编码器
  15. Linux tcpdump命令
  16. 使用 C# 开发智能手机软件:推箱子(十四)
  17. 微信小程序中公用内容
  18. python基础之上下文管理器
  19. [NOI2009]诗人小G --- DP + 决策单调性
  20. c# windows service 程序

热门文章

  1. 对echarts的简单封装
  2. SQL用row_number进行高速循环
  3. 基于AFNetworking3.0的网络封装
  4. php改写session到数据库
  5. Spring Boot Web项目之参数绑定
  6. Eclipse导入JavaWeb项目报错:The superclass &quot;javax.servlet.http.HttpServlet&quot; was not found on the Java Build Path
  7. kafka教程
  8. javascript 关于一周前一个月前的处理方法
  9. linux定时任务crond那些事!
  10. R for installing package &#39;omg&#39;