zoj 3511 Cake Robbery(线段树)
题目链接: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(线段树)相关推荐
- POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新
直接将这3题 放一起了 今天在做线段树的东西 这3个都是区间更新的 查询方式互相不同 反正都可以放到一起吧 直接先上链接了 touch me touch me touch me 关于涉及到区间的修改 ...
- 「hdu6681」Rikka with Cake【线段树】
Rikka with Cake Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) T ...
- ZOJ 3886 Nico Number (线段树)
题目地址:ZJU 3886 这个题需要想到一点,因为对一个数x不断取模的话,而且设定他小于模才会进行取余操作的话,那么最多只会进行logx次,因为每次取模都会使x最少折半.然后想到了这点就很好做了.对 ...
- 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 ...
- ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)
ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...
- 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 ...
- ZOJ 1610 Count the Colors (线段树区间更新)
题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...
- 2019多校第九场 HDU6681 Rikka with Cake(欧拉图论定理,线段树)
链接:HDU6681 Rikka with Cake 题意: 给出一个笛卡尔坐标系中左下角坐标为(0,0)(0,0)(0,0),右上角坐标为(n,m)(n,m)(n,m)的矩形,有K (≤105)K ...
- ZOJ 1610 Count the Colors 【线段树】
<题目链接> 题目大意: 在[0,8000]这个区间内,不断进行一些操作,将其中的一些区间染成特定颜色,如果区间重复的话,后面染的色块会覆盖前面染的色块,问最终[0,8000]这个区间内每 ...
最新文章
- linux-swappiness参数的作用及设置
- careercup-C和C++ 13.6
- boost::units模块测试元函数 is_unit, is_quantity, is_dimension_list ....
- [转]SqlServer2005 各版本区别
- Jerry Wang重装系统的一些备份
- 人工智能如何有效地运用于自然语言处理
- 前端基础-html-段落标签
- 直观判断每个整数是不是丑数的方法
- 大数据学习笔记15:MR案例——IP地址去重
- Byobu:打造多任务的Terminal
- Linux学习笔记016---CentOS7虚拟机设置使用静态IP上网_配置集群的时候可以用
- (转载)形态学腐蚀、膨胀——Matlab DIP(瓦)ch9形态学图像处理
- Spring Boot中Bean管理
- 微信dat文件用什么软件打开方式_dat文件用什么打开 微信电脑图片dat转为jpg
- 博客园 首页 新随笔 联系 订阅 管理 如何使用电脑上的谷歌浏览器来调试安卓手机上的移动端页面...
- 华为任正非:实事求是的科研方向与二十年的艰苦努力
- 欧派家居的财务费用也出现了较快速度的增长
- 音视频开发--音视频基础
- (建立VLAN把接口加入VLAN)(VLAN间路由)(VLAN协议)
- 统计图配色方案_填充