http://acm.hdu.edu.cn/showproblem.php?pid=6638

偷学一波潘哥的二维离散化和线段树维护最大子段和。

思路是枚举上下边界,但是不需要从左到右用最大子段和dp。

用O(n)建立线段树之后,下边界在往下增长的时候,每次只会单点修改某个点的值,影响这个点的祖先。

注意离散化减去的是数组的开头指针,而lowerbound减去的是另一个东西。

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
#define lc o<<1
#define rc o<<1|1 const int MAXN = 2000 + 5;
int x[MAXN], y[MAXN], w[MAXN], x2[MAXN], y2[MAXN]; ll amax[MAXN << 2], sum[MAXN << 2], lmax[MAXN << 2], rmax[MAXN << 2]; void pushup(int o) {
sum[o] = sum[lc] + sum[rc];
lmax[o] = max(lmax[lc], lmax[rc] + sum[lc]);
rmax[o] = max(rmax[rc], rmax[lc] + sum[rc]);
amax[o] = max(max(amax[lc], amax[rc]), rmax[lc] + lmax[rc]);
} void build(int o, int l, int r) {
if(l == r) {
sum[o] = lmax[o] = rmax[o] = amax[o] = 0;
} else {
int m = l + r >> 1;
build(lc, l, m);
build(rc, m + 1, r);
pushup(o);
}
} void update(int o, int l, int r, int x, int v) {
if(l == r) {
sum[o] += v;
lmax[o] = rmax[o] = amax[o] = max(0ll, sum[o]);
} else {
int m = l + r >> 1;
if(x <= m)
update(lc, l, m, x, v);
if(x >= m + 1)
update(rc, m + 1, r, x, v);
pushup(o);
}
} vector<pair<int, int> >upd[MAXN]; int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
int T;
while(~scanf("%d", &T)) {
while(T--) {
int n;
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%d%d%d", &x[i], &y[i], &w[i]);
x2[i] = x[i], y2[i] = y[i];
}
sort(x2 + 1, x2 + 1 + n), sort(y2 + 1, y2 + 1 + n);
int cn = unique(x2 + 1, x2 + 1 + n) - (x2 + 1);
int cm = unique(y2 + 1, y2 + 1 + n) - (y2 + 1);
for(int i = 1; i <= cn; ++i)
upd[i].clear();
for(int i = 1; i <= n; ++i) {
x[i] = lower_bound(x2 + 1, x2 + 1 + cn, x[i]) - x2;
y[i] = lower_bound(y2 + 1, y2 + 1 + cm, y[i]) - y2;
upd[x[i]].push_back({y[i], w[i]});
}
ll ans = 0;
for(int i = 1; i <= cn; ++i) {
build(1, 1, cm);
for(int j = i; j <= cn; ++j) {
for(auto ui : upd[j])
update(1, 1, cm, ui.first, ui.second);
ans = max(ans, amax[1]);
}
}
printf("%lld\n", ans);
}
}
}

2019 Multi-University Training Contest 7 - 1006 - Snowy Smile - 线段树的更多相关文章

  1. 2019杭电多校第六场hdu6638 Snowy Smile(线段树+枚举)

    Snowy Smile 题目传送门 解题思路 先把y离散化,然后把点按照x的大小进行排序,我们枚举每一种x作为上边界,然后再枚举其对应的每一种下边界.按照这种顺序插入点,这是一个压维的操作,即在线段树 ...

  2. HDU 6638 - Snowy Smile 线段树区间合并+暴力枚举

    HDU 6638 - Snowy Smile 题意 给你\(n\)个点的坐标\((x,\ y)\)和对应的权值\(w\),让你找到一个矩形,使这个矩阵里面点的权值总和最大. 思路 先离散化纵坐标\(y ...

  3. 吉首大学2019年程序设计竞赛(重现赛)-K(线段树)

    题目链接:https://ac.nowcoder.com/acm/contest/992/K 题意:给一个大小为1e5的数组,由0 1组成,有两种操作,包括区间修改,将一段区间内的0换成1,1换成0; ...

  4. 2019 Multi-University Training Contest 8 - 1006 - Acesrc and Travel - 树形dp

    http://acm.hdu.edu.cn/showproblem.php?pid=6662 仿照 CC B - TREE 那道题的思路写的,差不多.也是要走路径. 像这两种必须走到叶子的路径感觉是必 ...

  5. 2019 Multi-University Training Contest 3 - 1006 - Fansblog - 打表 - 暴力

    http://acm.hdu.edu.cn/showproblem.php?pid=6608 题意:给一个比较大的质数P(1e14以内),求比它小的最大的质数Q(貌似保证存在的样子,反正我没判不存在) ...

  6. 2015 Multi-University Training Contest 2 1006 Friends

    Friends Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5305 Mean: n个人,m对朋友关系,每个人的朋友中又分为在线 ...

  7. 2015 Multi-University Training Contest 3 1006 Beautiful Set

    Beautiful Set Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5321 Mean: 给出一个集合,有两种计算集合的值的 ...

  8. HDU 6324.Problem F. Grab The Tree-博弈(思维) (2018 Multi-University Training Contest 3 1006)

    6324.Problem F. Grab The Tree 题目看着好难,但是题解说的很简单,写出来也很简单.能想出来就是简单的,想不出来就难(讲道理,就算是1+1的题目,看不出来就是难的啊). 和后 ...

  9. 2015 Multi-University Training Contest 2 1006 Friends 壮压

    题目链接 题意:t 组測试数据,每组測试数据有 n个人,m条关系 每条关系能够是 "线上关系" 或者 "线下关系". 要求每一个人的线上关系(条数) == 线下 ...

随机推荐

  1. nginx图片过滤处理模块http_image_filter_module

    nginx图片过滤处理模块http_image_filter_module安装配置笔记 http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54 ...

  2. 接口返回buffer的16进制数据如何转换

    我们请求接口数据经常会看到buffer数据,这是我们可以使用data.toString()就可以啦~

  3. 6.25考试整理:江城唱晚&&不老梦&&棠梨煎雪——题解

    按照旧例,先安利一下主要作者:一扶苏一 以及扶苏一直挂念的——银临姐姐:银临_百度百科 (滑稽) 好哒,现在步入正题: 先看第一题: 题解: 在NOIP范围内,看到“求方案数”,就说明这个题是一个计数 ...

  4. JAVA-IO模型(BIO,NIO,AIO)

    基本概念 阻塞和非阻塞 阻塞是进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待, 直到有东西可读或者可写为止 非阻塞是如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等 ...

  5. PHP CGI

    cgi是通用网关接口,是连接web服务器和应用程序的接口. web服务器负责接收http请求,但是http请求从request到response的过程需要有应用程序的逻辑处理,web服务器一般是使用C ...

  6. Python学习笔记(二)Sublime Text 3 安装Package Control

    原来Subl3安装Package Control很麻烦,现在简单的方法来了 一.简单的安装方法 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码: ...

  7. postgresql获取表最后更新时间(通过表磁盘存储文件时间)

    一.创建获取表更新时间的函数 --获取表记录更新时间(通过表磁盘存储文件时间) create or replace function table_file_access_info( IN schema ...

  8. Python爬虫数据保存到MongoDB中

    MongoDB是一款由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储方式类似于JSON对象,它的字段值可以是其它文档或数组,但其数据类型只能是String文本型. ...

  9. 《JavaScript DOM 编程艺术 第 2 版》

    第 5 章 最佳实践 平稳退化:现在基本所有带交互的网站都使用 Ajax,SAP 也火起来了,平稳退化真是很难实现了(看到第七章发现我之前的观点是错了) 分离 JS 向下兼容 性能考虑 第 6 章 案 ...

  10. leetcode 40. 组合总和 II (python)

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...