[2019杭电多校第六场][hdu6638]Snowy Smile(维护区间最大子段和)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638
题意为在一个平面上任意选择一个长方形,使得长方形内点权和最大。
因为长方形可以任意选择,所以上下边一定在某些点上。所以可以枚举上下边。
将上下边看成一条直线y,上下边之间的点看成直线y上的点,则题意就转化成求直线y上最大子段和(子段和的左右边界即是长方形的左右边)。
用线段树维护(区间和&最大前缀和&最大后缀和)就可以维护得到区间最大子段和。
显然需要离散化(雾
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#define lson l, mid, i << 1
#define rson mid + 1, r, i << 1 | 1
using namespace std;
typedef long long ll;
const int maxn = + ;
struct node {
ll sum, max_sum, max_q, max_h;//区间和,区间最大子段和,最大前缀和,最大后缀和。
}T[maxn * ];
struct P {
int x, y;
ll w;
}p[maxn];
int x[maxn], y[maxn];
bool cmp(P a, P b) {
if (a.y == b.y)
return a.x < b.x;
return a.y < b.y;
}
void up(int i) {
T[i].sum = T[i << ].sum + T[i << | ].sum;
T[i].max_sum = max(T[i << | ].max_q + T[i << ].max_h, max(T[i << ].max_sum, T[i << | ].max_sum));
T[i].max_q = max(T[i << ].max_q, T[i << ].sum + T[i << | ].max_q);
T[i].max_h = max(T[i << | ].max_h, T[i << ].max_h + T[i << | ].sum);
}
void build(int l, int r, int i) {
T[i].sum = T[i].max_sum = T[i].max_q = T[i].max_h = ;
if (l == r)
return;
int mid = l + r >> ;
build(lson);
build(rson);
}
void update(int pos, int w, int l, int r, int i) {
if (l == r) {
T[i].sum += w;
T[i].max_sum = T[i].max_q = T[i].max_h = T[i].sum;
return;
}
int mid = l + r >> ;
if (pos <= mid)
update(pos, w, lson);
else
update(pos, w, rson);
up(i);
}
ll f[maxn];
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
ll ans = ;
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d%d%lld", &p[i].x, &p[i].y, &p[i].w);
x[i] = p[i].x, y[i] = p[i].y;
}
sort(x + , x + + n);
sort(y + , y + + n);
int xx = unique(x + , x + + n) - x - , yy = unique(y + , y + + n) - y - ;
for (int i = ; i <= n; i++) {
p[i].x = lower_bound(x + , x + + xx, p[i].x) - x;
p[i].y = lower_bound(y + , y + + yy, p[i].y) - y;
}
sort(p + , p + + n, cmp);
int now = ;
for (int i = ; i <= yy; i++) {
build(, xx, );
for (int j = i, k = now; j <= yy; j++) {
while (k <= n && p[k].y == j) {
update(p[k].x, p[k].w, , xx, );
k++;
}
if (j == i)
now = k;
ans = max(ans, T[].max_sum);
}
}
printf("%lld\n", ans);
}
}
[2019杭电多校第六场][hdu6638]Snowy Smile(维护区间最大子段和)的更多相关文章
- 2019杭电多校第六场hdu6638 Snowy Smile(线段树+枚举)
Snowy Smile 题目传送门 解题思路 先把y离散化,然后把点按照x的大小进行排序,我们枚举每一种x作为上边界,然后再枚举其对应的每一种下边界.按照这种顺序插入点,这是一个压维的操作,即在线段树 ...
- [2019杭电多校第六场][hdu6641]TDL
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6641 题意为求出最小的n,满足(f(n,m)-n)^n=k,其中f(n,m)为第m大的x,其中x满足g ...
- [2019杭电多校第六场][hdu6635]Nonsense Time
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6635 题意是说一开始所有数都冻结,第i秒会解冻第ki个数,求每秒状态下的最长上上升子序列长度. 这种题 ...
- 2018杭电多校第六场1009(DFS,思维)
#include<bits/stdc++.h>using namespace std;int a[100010];char s[20];int zhiren[100010];vector& ...
- 2017杭电多校第六场1008 Kirinriki
传送门 Kirinriki Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- 2017杭电多校第六场1011Classes
传送门 Classes Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- 2017杭电多校第六场03Inversion
传送门 Inversion Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- 2019杭电多校第七场 HDU - 6656 Kejin Player——概率&&期望
题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...
- 2019 杭电多校第八场 HDU - 6665 Calabash and Landlord 两矩形分平面
题意 给出两个矩形,问这两个矩形把平面分成了几部分. 分析 不需要什么高级技能,只需 “简单” 的分类讨论. (实在太难写了,对拍找出错误都不想改 推荐博客,其中有个很好的思路,即只讨论答案为2,3, ...
随机推荐
- Apache HttpClient 读取响应乱码问题总结
Apache HttpClient 读取响应乱码问题总结 setCharacterEncoding Content-Type HttpClient 起因 最近公司产品线研发人员调整,集中兵力做战 ...
- Django【第24篇】:JS实现的ajax和同源策略
JS实现的ajax和同源策略 一.回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器 ...
- 《SaltStack技术入门与实践》—— Renderer组件
Renderer组件 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 前面我们已经提过使用Python语言编写state.sls文件.在SaltSta ...
- 【SaltStack官方版】—— EVENTS & REACTOR指南
EVENTS & REACTOR Event System Event Bus Event types Salt Master Events Authentication events Sta ...
- 阿里重磅开源全球首个批流一体机器学习平台Alink,Blink功能已全部贡献至Flink
11月28日,Flink Forward Asia 2019 在北京国家会议中心召开,阿里在会上发布Flink 1.10版本功能前瞻,同时宣布基于Flink的机器学习算法平台Alink正式开源,这也是 ...
- 批量下载文件JSP
最近项目有个需求,用户想对挂有附件的数据记录 实现一键下载全部附件(目前项目仅支持每次点击单条记录进行附件下载),下面记录我实现的解决方案.项目框架基于SSMservice业务实现层(impl):// ...
- 【CF10D】LCIS(LCIS)
题意:求两个序列的LCIS n,m<=300,a[i]<=1e9 题意:O(n^2) O(n^3)的话设dp[i,j]为A终点为a[1..i]且B终点为b[j]的最大长度,分a[i]==b ...
- CF 546 B Soldier and Badges(贪心)
原题链接:http://codeforces.com/problemset/problem/546/B 原题描述: Soldier and Badges Colonel has n badges. H ...
- [CSP-S模拟测试]:序列(构造)
题目描述 给定$N,A,B$,构造一个长度为$N$的排列,使得:$\bullet$排列长度为$N$:$\bullet$最长上升子序列长度为$A$:$\bullet$最长下降子序列长度为$B$.我们有$ ...
- 个推一键认证SDK重磅推出,打造秒级登录体验,让用户一“键”倾心
移动互联网时代,用户注意力的持续时间越来越短,他们追求便捷与高效.从账号密码登录.短信验证,到第三方登录甚至人脸识别登录,APP的注册/登录方式在逐步变化,开发者希望在这重要的交互端口提升用户的体验, ...