LCP 74. 最强祝福力场 (差分,前缀和,二分,离散化)
力扣测试链接:https://leetcode.cn/problems/xepqZ5/
思路:
观察数据范围,发现x或y的坐标最大到1e9的大小,不能直接建立差分数组,所以需要进行离散化操作
将所有坐标提取出来,排序后,以下标作为新的坐标位置,再按照离散化操作后进行二维差分操作,从而得到重叠次数最多的答案
题解:
typedef long long ll;
class Solution {
public:
void add(int x1,int y1,int x2,int y2,vector<vector<ll>>&diff)
{
diff[x1][y1]++;
diff[x1][y2+1]--;
diff[x2+1][y1]--;
diff[x2+1][y2+1]++;
}
int search(ll x,vector<ll>&xp)
{
int ans=0;
int l=0;
int r=xp.size()-1;
while(l<=r)
{
int mid = (l+r)/2;
if(xp[mid]>=x)
{
ans=mid;
r=mid-1;
}
else
{
l=mid+1;
}
}
return ans+1;
}
int fieldOfGreatestBlessing(vector<vector<int>>& forceField) {
set<ll>x;
set<ll>y;
for(int i=0;i<forceField.size();i++)
{
ll xx = forceField[i][0];
ll yy = forceField[i][1];
ll r = forceField[i][2];
x.insert((xx<<1)+r);
x.insert((xx<<1)-r);
y.insert((yy<<1)-r);
y.insert((yy<<1)+r);
}
int sizex = x.size();
int sizey = y.size();
vector<ll>xp;
vector<ll>yp;
for(auto i:x)
{
xp.push_back(i);
}
for(auto i:y)
{
yp.push_back(i);
}
sort(xp.begin(),xp.end());
sort(yp.begin(),yp.end());
vector<vector<ll>>diff(sizex+2,vector<ll>(sizey+2,0));
for(int i=0;i<forceField.size();i++)
{
ll x = forceField[i][0];
ll y = forceField[i][1];
ll r = forceField[i][2];
ll x1 = (x<<1)-r;
ll y1 = (y<<1)-r;
ll x2 = (x<<1)+r;
ll y2 = (y<<1)+r;
ll x3 = search(x1,xp);
ll x4 = search(x2,xp);
ll y3 = search(y1,yp);
ll y4 = search(y2,yp);
add(x3,y3,x4,y4,diff);
}
ll ans=0;
for(int i=1;i<diff.size();i++)
{
for(int j=1;j<diff[0].size();j++)
{
diff[i][j]+=diff[i-1][j]+diff[i][j-1]-diff[i-1][j-1];
ans = max(ans,diff[i][j]);
}
}
return ans;
}
};
LCP 74. 最强祝福力场 (差分,前缀和,二分,离散化)的更多相关文章
- Codeforces Global Round 2 D 差分 + 前缀和 + 二分
https://codeforces.com/contest/1119/problem/D 题意 有n个数组,每个数组大小为\(10^{18}+1\)且为等差数列,给出n个数组的\(s[i]\),q次 ...
- CodeForces 1119D(差分+前缀和+二分)
题意:给你一个数组,数组每次每个数都+1,有q次查询每一查询+L到+R中出现的所有不重复的数字个数. +L到+R其实就相当于是0到+(R-L+1) 感觉自己写的好啰嗦,直接上代码加注释: 1 #inc ...
- Educational Codeforces Round 61 C 枚举 + 差分前缀和
https://codeforces.com/contest/1132/problem/C 枚举 + 差分前缀和 题意 有一段[1,n]的线段,有q个区间,选择其中q-2个区间,使得覆盖线段上的点最多 ...
- HRBUST 1909——理工门外的树——————【离线处理,差分前缀和】
理工门外的树 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %lld , %llu Java class n ...
- HDU 5419——Victor and Toys——————【线段树|差分前缀和】
Victor and Toys Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others ...
- HDU 5452——Minimum Cut——————【树链剖分+差分前缀和】ACdream 1429——Diversion——————【树链剖分】
Minimum Cut Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 65535/102400 K (Java/Others)Tota ...
- 洛谷 P3258 [JLOI2014]松鼠的新家 树链剖分+差分前缀和优化
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例: 输出样例: 说明 说明 思路 AC代码 优化 优化后AC代码 总结 题面 题目链接 P3258 [JLOI2 ...
- Glider(前缀和+二分)
题目链接:Glider Gym-101911B 解题分析:下落的高度一定,是h.在没有气流的地方每秒下落1:所以可以转化为经过无气流地带的时间总长为h. 那么很显然从一个有气流地带的开始,选择下落,那 ...
- Acwing:102. 最佳牛围栏(前缀和 + 二分)
农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最 ...
- Codeforces 975 前缀和二分算存活人数 思维离直线速度相同判平行
A /* Huyyt */ #include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; map< ...
随机推荐
- 阿里云部署Django主要注意事项
(1)virtualenv 报错 os 没有 PathLike属性 阿里云ubuntu16.0服务器默认python版本分别是2.7.12,3.5.2,而PathLike是在python 3.6时才被 ...
- 🚀 Python f-string 全攻略:从入门到大师,让你的编码效率翻倍!
目录 什么是 f-string 基础用法 变量插值 表达式嵌入 调用函数 数字格式化 千位分隔符 控制小数位数 百分比转换 科学计数法 文本对齐与填充 填充对齐 自定义填充字符 日期时间格式化 进阶技 ...
- React Native开发鸿蒙Next---灰度模式
React Native开发鸿蒙Next---灰度模式 政企相关的App在开发过程中,往往需要制作一个灰度模式,用于应对注入国家公祭日等特殊日期情况.Harmony开发中,由于基于ArkTs,处理相对 ...
- linux下使用动态壁纸
让你的linux桌面动起来(幻梦动态壁纸) 我也是突发奇想,做了这么一个程序,目前在多个linux下可以运行,支持双屏 理论上说支持mpv >=29.0 qt>=5.8.0的系统版本 ub ...
- IntelliJ IDEA 源文件提示 cannot resolve method 或者 Cannot find declaration to go to
问题描述:IntelliJ IDEA 在源文件中提示 Cannot resolve method,但是项目可以正常编译运行,提示异常的类明明存在且没有任何异常.尝试使用ctrl+鼠标左键进入该类时,提 ...
- 使用 frp 进行内网穿透
frp 是一个开源的内网穿透工具,可以使外网设备访问内网防火墙后的设备/服务器. 比如可以买一个 99元/年 的阿里云低配 ECS,然后把自己相对高配的旧电脑放在家里. 家里的旧电脑通过 frp 连上 ...
- 在云服务器上开MC-Forge服
在云服务器上开MC-Forge服 记录一下在云服务器上开mc-1.16.5-Forge服. OS: Ubuntu 22.04.2 LTS x86_64 CPU: Intel Xeon Platinum ...
- Web端通用数据效验
如有问题请指正,谢谢! /*//通用IE,获取时间,只允许输入8位-分割的日期 function getMyDateTime(myDate) { //带日期格式的,去掉日期. if (myDate.l ...
- Excel Micro (VBA)
- git ---多用户管理
一.概述 相信大家都遇到过这样的问题,实际开发中需要在一台PC上用到 不同平台git的账号甚至同一个平台的多个账号(比如本人gitee .字自己在nas上搭建的gitea ,另外还有github账 ...