牛客第十场 F.Popping Balloons
第一维直接遍历 第二维用线段树维护每个最左端可以得到的贡献
在线段树上每次删除一个点会影响到 X X-R X-2*R 3个值 最多操作1e5次 复杂度 6*n*logn(删了还要加回来
#include<bits/stdc++.h>
using namespace std;
const int MAXN = ;
int num[MAXN];
int number[MAXN];
struct Seg_Tre {
int l, r;
int w;
} tree[MAXN << ];
inline void push_up(int x) {
tree[x].w = max(tree[x << ].w, tree[(x << ) | ].w);
}
inline void build(int x, int ll, int rr) {
tree[x].l = ll, tree[x].r = rr;
if (tree[x].l == tree[x].r) {
tree[x].w = number[ll];
return;
}
int m = (ll + rr) >> ;
build(x << , ll, m);
build((x << | ), m + , rr);
push_up(x);
}
inline void change_point(int x, int aim, int add) {
if (tree[x].l == tree[x].r) {
tree[x].w += add;
return;
}
int m = (tree[x].l + tree[x].r) >> ;
if (aim <= m) {
change_point(x << , aim, add);
} else {
change_point((x << ) | , aim, add);
}
push_up(x);
}
inline int ask_interval(int x, int ll, int rr) {
if (tree[x].l > rr || tree[x].r < ll)
return -;
if (tree[x].l >= ll && tree[x].r <= rr) {
return tree[x].w;
}
int now = ;
int m = (tree[x].l + tree[x].r) >> ;
if (ll <= m) {
now = max(now, ask_interval(x << , ll, m));
}
if (rr > m) {
now = max(now, ask_interval((x << ) | , m + , rr));
}
return now;
}
vector<int> G[MAXN];
int main() { int n, r;
int x, y;
scanf("%d %d", &n, &r);
for (int i = ; i <= n; i++) {
scanf("%d %d", &x, &y);
G[x].push_back(y);
num[y]++;
}
for (int i = ; i <= ; i++) {
for (int j = ; j <= ; j++) {
if (i + j * r <= ) {
number[i] += num[i + j * r];
}
}
}
build(, , );
int ansnow = ;
for (int i = ; i <= ; i++) {
int now = ;
for (int j = ; j <= ; j++) {
int u = i + j * r;
if (u > )
break;
for (int v : G[u]) {
now++;
for (int k = ; k <= ; k++)
if (v - k * r >= )
change_point(, v - k * r, -);
}
}
ansnow = max(ansnow, now + ask_interval(,,));
for (int j = ; j <= ; j++) {
int u = i + j * r;
if (u > )
break;
for (int v : G[u]) {
now++;
for (int k = ; k <= ; k++)
if (v - k * r >= )
change_point(, v - k * r, );
}
}
}
printf("%d\n", ansnow);
return ;
}
牛客第十场 F.Popping Balloons的更多相关文章
- 牛客多校第十场 F Popping Balloons 线段树维护稀疏矩阵
题意: 给定一个稀疏矩阵,里面有若干个气球,让你横着开三枪,竖着开三枪,问最多能打爆多少气球,要求相同方向,相邻两枪必须间隔r. 题解: 横向记录每列有多少个气球,分别在哪行上. 然后把这个数据改造成 ...
- 牛客第十场Rikka with Prefix Sum
由于其中的2操作非常多,我们就需要将其快速的更改,就会用到组合数的东西 其实自己手写一下就可以发现对于一个点增加的值在经过不断地前缀和累加过程中对于一点的贡献满足杨辉三角 所以我们就需要记录一下其中的 ...
- Wood Processing牛客第十场 斜率优化DP
卧槽我感觉写的是对的,但是就是样例都过不了...留坑 #include<iostream> #include<stdio.h> #include<string.h> ...
- 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)
链接:https://ac.nowcoder.com/acm/contest/392/F来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K ...
- 牛客网练习赛23 F 托米的游戏
链接:https://www.nowcoder.com/acm/contest/156/F 来源:牛客网 题目描述 题目背景编不下去了 托米有一棵有根树 T, 树根为1,每轮他会在剩下的子树中等概率一 ...
- 牛客小白赛1 F题三视图
链接:https://www.nowcoder.com/acm/contest/85/F来源:牛客网 题目描述 Etéreo 拿出家里的许多的立方体积木,堆成了一个三维空间中的模型.既然你高考选了技术 ...
- 牛客小白月赛3 F 异或【区间交集】
链接:https://www.nowcoder.com/acm/contest/87/F 来源:牛客网 题目描述 Cwbc想测试一下他的加密协议,以便防止其他人偷看他给XHRlyb的信. Cwbc提出 ...
- 牛客网 牛客小白月赛1 F.三视图
F.三视图 链接:https://www.nowcoder.com/acm/contest/85/F来源:牛客网 这个题自己想一下三维的,正视图和左视图中y轴为行数,x轴和z轴是列数,因为 ...
- 牛客OI测试赛 F 子序列 组合数学 欧拉降幂公式模板
链接:https://www.nowcoder.com/acm/contest/181/F来源:牛客网 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘 ...
随机推荐
- 攻防世界WEB新手练习
0x01 view_source 0x02 get_post 这道题就是最基础的get和post请求的发送 flag:cyberpeace{b1e763710ff23f2acf16c2358d3132 ...
- C#7:什么是丢弃物以及如何使用它们
转载 http://www.devsanon.com/c/using-discards-feature-of-c-7 假设您希望调用一个具有返回值并且也接受out变量的方法,但是您不希望使用将要返回的 ...
- 【Qt开发】 QT:make: Nothing to be done for `first'和error:QtSql:No such file or directory
http://blog.csdn.NET/heqiuya/article/details/7774208 这是QT编程中常见的两个编译错误.可能你的代码在window下编译能正常通过,可是到到Linu ...
- 连接池和JDBCTemplate
一:什么是连接池?使用连接池的好处是什么? 连接池就是一个存放数据库连接对象的容器.当系统初始化后,就会向数据库申请一些连接对象存放到容器里,用的时候直接从容器里取,用完后放回连接池. 连接池可以提高 ...
- 《你必须知道的495个C语言问题》读书笔记之第8-10章:字符串、布尔类型和预处理器
一.字符和字符串 1. Q:为什么strcat(string, '!')不行? A:strcat()用于拼接字符串,所以应该写成strcat(string, "!")." ...
- [转帖]Kubernetes中安装Helm及使用
Kubernetes中安装Helm及使用 2018年07月02日 17:41:09 灬勿忘丶心安 阅读数 3699更多 分类专栏: K8S 版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...
- 使用pycharm开发web——django2.1.5(二)创建一个app并做一些配置
这里我学习的呢是刘江老师的站,主要原因在于他这个版本新,还比较细节 网址先留一手,约等于在引用http://www.liujiangblog.com/ 开始正题: 1.在pycharm界面终端命令行里 ...
- centos 安装go
[root@golong-learning src]# wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz # 下载 [root@gol ...
- 【模板】C++高精度加法
所谓高精度加法就是对两个和可能会超过long long数据范围的数进行加法运算.这种情况下,显然不能使用常规的方法进行运算. 那么,不妨考虑一下人在纸上是如何进行加法运算的.当人进行加法运算时,通常会 ...
- Unable to find optional library: org.apache.http.legacy 错误
在目录adt-bundle-windows-x86_64-20140702\sdk\platforms\android-20或者 C:\Users\Administrator\AppData\Loca ...