2019杭电多校6 hdu6638 Snowy Smile(二维最大矩阵和 线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=6638
题意:给你一些点的权值,让找一个矩形圈住一部分点,问圈住点的最大权值和
分析:由于是稀疏图,明显要先把x,y坐标离散化,暴力是n^3?(枚举边界n^2,求和是n)显然过不了,那可以枚举y的边界,然后对于x就是最大子段和的问题了,用线段树维护,n^2logn可以过。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 4e3+;
const int inf = 0x3f3f3f;
typedef pair<int,int> P;
typedef long long ll;
int cas,n;
struct point{
int x,y,val;
bool operator<(const point &a) const{
return y<a.y;
}
}a[maxn];
vector<int> p[maxn];
int bx[maxn],by[maxn]; struct node{
ll sum,lmax,rmax,lrmax;
}tree[maxn<<]; inline void pushup(int rt){
tree[rt].sum = tree[rt<<].sum+tree[rt<<|].sum;
tree[rt].lmax = max(tree[rt<<].lmax,tree[rt<<].sum+tree[rt<<|].lmax);
tree[rt].rmax = max(tree[rt<<|].rmax,tree[rt<<].rmax+tree[rt<<|].sum);
tree[rt].lrmax = max(max(tree[rt<<].lrmax,tree[rt<<|].lrmax),tree[rt<<].rmax+tree[rt<<|].lmax);
} inline void update(int L,int l,int r,int rt,int c){
if(l==r){
tree[rt].sum += 1ll*c;
tree[rt].lrmax = tree[rt].lmax = tree[rt].rmax = tree[rt].sum;
return;
}
int mid = l+r>>;
if(L<=mid) update(L,l,mid,rt<<,c);
else update(L,mid+,r,rt<<|,c);
pushup(rt);
} int main(){
cin>>cas;
while(cas--){
cin>>n;
for(int i=;i<=n;i++){
cin>>a[i].x>>a[i].y>>a[i].val;
bx[i] = a[i].x,by[i] = a[i].y;
}
sort(bx+,bx++n);
int xlen = unique(bx+,bx++n)-bx-;
sort(by+,by++n);
int ylen = unique(by+,by++n)-by-;
for(int i=;i<=n;i++){
a[i].x = lower_bound(bx+,bx+xlen+,a[i].x)-bx;
a[i].y = lower_bound(by+,by+ylen+,a[i].y)-by;
}
sort(a+,a++n);
ll ans = ;
for(int i=;i<=ylen;i++){
memset(tree,,(xlen*+)*sizeof(node));
int pos = ;
while(a[pos].y<i&&pos<=n) pos++;
for(int j=i;j<=ylen;j++){
while(a[pos].y<=j&&pos<=n){
update(a[pos].x,,xlen,,a[pos].val);
pos++;
}
ans = max(ans,tree[].lrmax);
} }
cout<<ans<<endl;
}
return ;
}
2019杭电多校6 hdu6638 Snowy Smile(二维最大矩阵和 线段树)的更多相关文章
- 2019杭电多校第四场hdu6621 K-th Closest Distance(二分答案+主席树)
K-th Closest Distance 题目传送门 解题思路 二分答案+主席树 先建主席树,然后二分答案mid,在l和r的区间内查询[p-mid, p+mid]的范围内的数的个数,如果大于k则说明 ...
- 2019杭电多校第六场hdu6638 Snowy Smile(线段树+枚举)
Snowy Smile 题目传送门 解题思路 先把y离散化,然后把点按照x的大小进行排序,我们枚举每一种x作为上边界,然后再枚举其对应的每一种下边界.按照这种顺序插入点,这是一个压维的操作,即在线段树 ...
- [2019杭电多校第六场][hdu6638]Snowy Smile(维护区间最大子段和)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意为在一个平面上任意选择一个长方形,使得长方形内点权和最大. 因为长方形可以任意选择,所以上下 ...
- 2019杭电多校&CCPC网络赛&大一总结
多校结束了, 网络赛结束了.发现自己还是太菜了,多校基本就是爆零和签到徘徊,第一次打这种高强度的比赛, 全英文,知识点又很广,充分暴露了自己菜的事实,发现数学还是很重要的.还是要多刷题,少玩游戏. 网 ...
- 2019杭电多校第一场hdu6581 Vacation
Vacation 题目传送门 update(O(n)) 看了那个O(n)的方法,感觉自己想的那个O(nlogn)的好傻,awsl. 0车最终通过停车线的时候,状态一定是某个车堵住后面的所有车(这个车也 ...
- 2019杭电多校第二场hdu6601 Keen On Everything But Triangle
Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于 ...
- 2019杭电多校第二场hdu6602 Longest Subarray(线段树)
Longest Subarray 题目传送门 解题思路 本题求一个最大的子区间,满足区间内的数字要么出现次数大于等于k次,要么没出现过.给定区间内的数字范围是1~c. 如果r为右边界,对于一种数字x, ...
- Rikka with Game[技巧]----2019 杭电多校第九场:1005
Rikka with Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Othe ...
- 2019杭电多校 hdu6662 Acesrc and Travel (树形dp
http://acm.hdu.edu.cn/showproblem.php?pid=6662 题意:有两个人在树上博弈,每个点节点有两个分数a[i]和b[i],先手先选择一个点,后手在先手选的点的相邻 ...
随机推荐
- 手动编译PHP开发环境
目录 手动编译PHP开发环境 问题复盘 部署环境及配置 目标环境 安装部署环境开始 首先安装PHP 安装mysql 安装nginx 手动编译PHP开发环境 这是一篇来自深夜加班的手稿 问题复盘 你有没 ...
- ssm 搭建项目各项配置
首先配置 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- JVM总结(二)
JVM总结(2)java内存区域.字节码执行引擎 1.内存区域 程序计数器:知道线程执行位置,保证线程切换后能恢复到正确的执行位置. 虚拟机栈:存栈帧.栈帧里存局部变量表.操作栈.动态连接.方法返回地 ...
- Java虚拟机学习笔记(三)--- 生存还是死亡
即便是可达性分析中不可达的对象,也不代表该对象一定被回收,一个对象被“宣判死刑”需要经过两次标记,第一次是被可达性算法标记为不可用,然后进入第二次筛选,筛选条件是对象是否有必要执行finalize() ...
- 【0725 | Day 1】计算机编程/计算机组成原理/计算机操作系统
什么是编程 编程语言:人与计算机交流的手段 编程:通过编程语言编写文件 学习编程的目的:让计算机代替人力,为我们服务 计算机组成原理 计算机由五大部分组成:控制器.运算器.存储器.输入设备.输出设备. ...
- Jmeter 01 Jmeter下载安装及入门
jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域.--百度百科 下载 下载 ...
- asp.net core 从单机到集群
asp.net core 从单机到集群 Intro 这篇文章主要以我的活动室预约的项目作为示例,看一下一个 asp.net core 应用从单机应用到分布式应用需要做什么. 示例项目 活动室预约提供了 ...
- AUTOCAD二次开发-----删除一个图层里面的所有对象
https://blog.csdn.net/aasswwe/article/details/40899759 private void Test() { // 获取当前文档和数据库 Document ...
- 解决OneNote同步出错
问题: onenote同步出现黄色叹号. 解决: 分析: 对每个分区进行设置密码,不能设置的证明该分区有问题.(可能不只一个分区卡同步) 解决方法: 1,将有问题的分区分制一份,然后删掉原来的分区 2 ...
- DFS-深度优先算法解决迷宫问题
/*main.cpp*/#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; int sr, sc ...