博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 3511 Cake Robbery(线段树)
阅读量:6886 次
发布时间:2019-06-27

本文共 1788 字,大约阅读时间需要 5 分钟。

ZOJ 3511 Cake Robbery

题意:给定一个n边形。切m刀。问切了之后最大边数的子块边数是多少,保证切的边不会交叉

思路:由于有保证切的边不交叉这个条件,所以能够按切掉点数排序。点数最少优先切,由于点数最少肯定是被包括了,这样一刀刀切过去,切过的点就剔除掉。并记录下最大值,利用线段树维护就可以

代码:

#include 
#include
#include
using namespace std;const int N = 10005;int n, m;struct Query { int l, r; void read() { scanf("%d%d", &l, &r); if (l > r) swap(l, r); }} q[N];bool cmp(Query a, Query b) { return a.r - a.l < b.r - b.l;}#define lson(x) ((x<<1)+1)#define rson(x) ((x<<1)+2)struct Node { int l, r, sum; int lazy; void gao() { lazy = 1; sum = 0; }} node[N * 4];void pushup(int x) { node[x].sum = node[lson(x)].sum + node[rson(x)].sum;}void pushdown(int x) { if (node[x].lazy) { node[lson(x)].gao(); node[rson(x)].gao(); node[x].lazy = 0; }}void build(int l, int r, int x = 0) { node[x].l = l; node[x].r = r; node[x].lazy = 0; if (l == r) { node[x].sum = 1; return; } int mid = (l + r) / 2; build(l, mid, lson(x)); build(mid + 1, r, rson(x)); pushup(x);}void add(int l, int r, int x = 0) { if (node[x].l >= l && node[x].r <= r) { node[x].gao(); return; } int mid = (node[x].l + node[x].r) / 2; pushdown(x); if (l <= mid) add(l, r, lson(x)); if (r > mid) add(l, r, rson(x)); pushup(x);}int query(int l, int r, int x = 0) { if (node[x].l >= l && node[x].r <= r) return node[x].sum; int mid = (node[x].l + node[x].r) / 2; int ans = 0; pushdown(x); if (l <= mid) ans += query(l, r, lson(x)); if (r > mid) ans += query(l, r, rson(x)); pushup(x); return ans;}int main() { while (~scanf("%d%d", &n, &m)) { build(1, n); int l, r; for (int i = 0; i < m; i++) q[i].read(); sort(q, q + m, cmp); int ans = 0; for (int i = 0; i < m; i++) { ans = max(ans, query(q[i].l, q[i].r)); add(q[i].l + 1, q[i].r - 1); } ans = max(ans, node[0].sum); printf("%d\n", ans); } return 0;}

转载地址:http://frtbl.baihongyu.com/

你可能感兴趣的文章
0312-css样式(选择器、文本text、字体fonts、背景background)
查看>>
【BZOJ】4358: permu 莫队算法
查看>>
powerdesigner 遇到的各种问题总结
查看>>
(转)韦东山linux学习笔记——ubuntu 9.10 软件源问题
查看>>
SQL错误
查看>>
还款计算-复式记账
查看>>
C# 利用性能计数器监控网络状态
查看>>
网络对抗技术作业一
查看>>
最短路(Floyd_Warshall) POJ 2240 Arbitrage
查看>>
select2使用
查看>>
POJ1816:Wild Words——题解
查看>>
12.使用default-Action配置统一访问
查看>>
mysql建表---级联删除
查看>>
分布式队列神器 Celery
查看>>
windows 允许其他电脑访问本地mysql数据库
查看>>
.Net进阶系列(21)-跨域请求
查看>>
标准输入的EOF
查看>>
如何使用Git命令将项目从github或者服务器上克隆下来
查看>>
cplusplus.com
查看>>
svg了解一下
查看>>