题目链接:zoj 3511 Cake Robbery

题目大意:就是有一个N边形的蛋糕。切M刀,从中挑选一块边数最多的。保证没有两条边重叠。

解题思路:有多少个顶点即为有多少条边,所以直接依照切刀切掉点的个数排序,然后用线段树维护剩下的还有哪些点。

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>using namespace std;const int maxn = 10005;#define lson(x) ((x)<<1)
#define rson(x) (((x)<<1)|1)
int lc[maxn << 2], rc[maxn << 2], s[maxn << 2];inline void pushdown(int u) {if (s[u] == 0)s[lson(u)] = s[rson(u)] = 0;
}inline void pushup(int u) {s[u] = s[lson(u)] + s[rson(u)];
}void build (int u, int l, int r) {lc[u] = l;rc[u] = r;if (l == r) {s[u] = 1;return;}int mid = (l + r) / 2;build(lson(u), l, mid);build(rson(u), mid + 1, r);pushup(u);
}void modify (int u, int l, int r) {if (l > r)return;if (l <= lc[u] && rc[u] <= r) {s[u] = 0;return;}pushdown(u);int mid = (lc[u] + rc[u]) / 2;if (l <= mid)modify(lson(u), l, r);if (r > mid)modify(rson(u), l, r);pushup(u);
}int N, M;
struct Seg {int l, r, c;Seg (int l = 0, int r = 0) {this->l = l;this->r = r;this->c = r - l + 1;}friend bool operator < (const Seg& a, const Seg& b) {return a.c < b.c;}
};
vector<Seg> vec;int main () {while (scanf("%d%d", &N, &M) == 2) {int l, r, ans = 0;build(1, 1, N);vec.clear();while (M--) {scanf("%d%d", &l, &r);if (l > r) swap(l, r);vec.push_back(Seg(l, r));}sort(vec.begin(), vec.end());for (int i = 0; i < vec.size(); i++) {int tmp = s[1];modify(1, vec[i].l + 1, vec[i].r - 1);ans = max(ans, tmp - s[1] + 2);}printf("%d\n", max(ans, s[1]));}return 0;
}

zoj 3511 Cake Robbery(线段树)相关推荐

  1. POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新

    直接将这3题 放一起了  今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...

  2. 「hdu6681」Rikka with Cake【线段树】

    Rikka with Cake Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) T ...

  3. ZOJ 3886 Nico Number (线段树)

    题目地址:ZJU 3886 这个题需要想到一点,因为对一个数x不断取模的话,而且设定他小于模才会进行取余操作的话,那么最多只会进行logx次,因为每次取模都会使x最少折半.然后想到了这点就很好做了.对 ...

  4. hdu6681 Rikka with Cake【线段树】【离散化】【2019 Multi-University Training Contest 9】

    题意: 在一个封闭的n*m的矩形内,有k条射线,有四个方向,上下左右,射线,射线的端点不重合,该矩形内有多少个封闭的区域 1≤n,m≤1e9,1≤k≤1e51\le n,m \le 1e9 ,1\le ...

  5. ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)

    ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...

  6. Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake 线段树维护dp

    D. Babaei and Birthday Cake 题目连接: http://www.codeforces.com/contest/629/problem/D Description As you ...

  7. ZOJ 1610 Count the Colors (线段树区间更新)

    题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...

  8. 2019多校第九场 HDU6681 Rikka with Cake(欧拉图论定理,线段树)

    链接:HDU6681 Rikka with Cake 题意: 给出一个笛卡尔坐标系中左下角坐标为(0,0)(0,0)(0,0),右上角坐标为(n,m)(n,m)(n,m)的矩形,有K  (≤105)K ...

  9. ZOJ 1610 Count the Colors 【线段树】

    <题目链接> 题目大意: 在[0,8000]这个区间内,不断进行一些操作,将其中的一些区间染成特定颜色,如果区间重复的话,后面染的色块会覆盖前面染的色块,问最终[0,8000]这个区间内每 ...

最新文章

  1. linux-swappiness参数的作用及设置
  2. careercup-C和C++ 13.6
  3. boost::units模块测试元函数 is_unit, is_quantity, is_dimension_list ....
  4. [转]SqlServer2005 各版本区别
  5. Jerry Wang重装系统的一些备份
  6. 人工智能如何有效地运用于自然语言处理
  7. 前端基础-html-段落标签
  8. 直观判断每个整数是不是丑数的方法
  9. 大数据学习笔记15:MR案例——IP地址去重
  10. Byobu:打造多任务的Terminal
  11. Linux学习笔记016---CentOS7虚拟机设置使用静态IP上网_配置集群的时候可以用
  12. (转载)形态学腐蚀、膨胀——Matlab DIP(瓦)ch9形态学图像处理
  13. Spring Boot中Bean管理
  14. 微信dat文件用什么软件打开方式_dat文件用什么打开 微信电脑图片dat转为jpg
  15. 博客园 首页 新随笔 联系 订阅 管理 如何使用电脑上的谷歌浏览器来调试安卓手机上的移动端页面...
  16. 华为任正非:实事求是的科研方向与二十年的艰苦努力
  17. 欧派家居的财务费用也出现了较快速度的增长
  18. 音视频开发--音视频基础
  19. (建立VLAN把接口加入VLAN)(VLAN间路由)(VLAN协议)
  20. 统计图配色方案_填充

热门文章

  1. hadoop学习4 调测错误备案
  2. SQL Server安装文件挂起错误解决办法
  3. 046 实例11-自动轨迹绘制
  4. vue.js单页面应用实例
  5. SSH初体验系列--Hibernate--1--环境配置及demo
  6. 【Hibernate】Hibernate系列6之HQL查询
  7. MonoBehaviour.FixedUpdate 固定更新
  8. 自执行匿名函数剖析整理
  9. Cortex-M3 的SVC、PendSV异常,与操作系统(ucos实时系统)(转)
  10. 设计模式——3.观察者模式