题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6638
题目大意:在二维平面空间有 n 个点,每个点有一个点权 wi,一个边平行于坐标轴的矩形的权值为该矩形内所有点的点权和。问选取一个矩形点权和最大是多少。

题解:先将坐标离散化,以x坐标建线段树,枚举y坐标上界和下界,将y坐标位于上下界内的点加入线段树,每次查询线段树最大子段和。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 10;
typedef long long ll;
struct ss{int l,r;ll lv,rv,mv,sum;
}tree[maxn << 2];
void pushup(int rt){tree[rt].lv = max(tree[rt << 1].lv,tree[rt << 1].sum + tree[rt << 1 | 1].lv);tree[rt].rv = max(tree[rt << 1 | 1].rv,tree[rt << 1 | 1].sum + tree[rt << 1].rv);tree[rt].mv = max(max(tree[rt << 1].mv,tree[rt << 1 | 1].mv),tree[rt << 1].rv + tree[rt << 1 | 1].lv);tree[rt].sum = tree[rt << 1].sum + tree[rt << 1 | 1].sum;
}
void build(int rt,int l,int r){tree[rt].l = l;tree[rt].r = r;if(tree[rt].l == tree[rt].r){tree[rt].lv = tree[rt].rv = tree[rt].mv = tree[rt].sum = 0;return ;}int mid = l + r >> 1;build(rt << 1,l,mid);build(rt << 1 | 1,mid + 1,r);pushup(rt);
}
void update(int rt,int p,ll k){if(tree[rt].l == tree[rt].r){tree[rt].lv += k;tree[rt].rv += k;tree[rt].mv += k;tree[rt].sum += k;return ;}int mid = tree[rt].l + tree[rt].r >> 1;if(p > mid) update(rt << 1 | 1,p,k);else update(rt << 1,p,k);pushup(rt);
}
ss query(int rt,int l,int r){if(tree[rt].l >= l && tree[rt].r <= r) return tree[rt];int mid = tree[rt].l + tree[rt].r >> 1;if(l <= mid && r > mid){          //如果跨了两个区间 ss x1 = query(rt << 1,l,mid);ss x2 = query(rt << 1 | 1,mid + 1,r);ss ans;ans.lv = max(x1.lv,x1.sum + x2.lv);ans.rv = max(x2.rv,x2.sum + x1.rv);ans.mv = max(max(x1.mv,x2.mv),x1.rv + x2.lv);ans.sum = x1.sum + x2.sum;return ans;}else{if(l > mid) return query(rt << 1 | 1,l,r);else return query(rt << 1,l,r);}
}
int t,n;
int x[maxn],y[maxn],z[maxn];
int tx[maxn],ty[maxn],px,py;
vector<int> g[maxn];
int main() {scanf("%d",&t);while(t--) {px = py = 0;scanf("%d",&n);for(int i = 1; i <= n; i++) {scanf("%d%d%d",&x[i],&y[i],&z[i]);tx[i] = x[i];ty[i] = y[i];g[i].clear();}sort(tx + 1,tx + n + 1,less<int>());sort(ty + 1,ty + n + 1,less<int>());px = unique(tx + 1,tx + n + 1) - tx - 1;py = unique(ty + 1,ty + n + 1) - ty - 1;for(int i = 1; i <= n; i++) {x[i] = lower_bound(tx + 1,tx + px + 1,x[i]) - tx;y[i] = lower_bound(ty + 1,ty + py + 1,y[i]) - ty;}for(int i = 1; i <= n; i++)g[y[i]].push_back(i);ll ans = 0;for(int i = 1; i <= py; i++) {build(1,1,px);for(int j = i; j <= py; j++) {for(auto k : g[j])update(1,x[k],z[k]);ss res = query(1,1,px);ans = max(ans,res.mv);}}printf("%lld\n",ans);}return 0;
}

2019 Multi-University Training Contest 6:Snowy Smile(线段树查询最大子段和)相关推荐

  1. 2019 牛客多校 C Governing sand 线段树

    链接:https://ac.nowcoder.com/acm/contest/887/C 来源:牛客网 Governing sand 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 6 ...

  2. 2019南昌网络赛-I(单调栈+线段树)

    题目链接:https://nanti.jisuanke.com/t/38228 题意:定义一段区间的值为该区间的和×该区间的最小值,求给定数组的最大的区间值. 思路:比赛时还不会线段树,和队友在这题上 ...

  3. 2019.03.26 bzoj4444: [Scoi2015]国旗计划(线段树+倍增)

    传送门 题意简述:现在给你一个长度为mmm的环,有nnn条互不包含的线段,问如果强制选第iii条线段至少需要用几条线段覆盖这个环,注意用来的覆盖的线段应该相交,即[1,3],[4,5][1,3],[4 ...

  4. 2019 ICPC银川区域赛 G - Pot!!(线段树维护动态RMQ)

    传送门 题目大意 若ppp为质数,定义potp(n)pot_p(n)potp​(n)为nnn分解质因数ppp的指数.给定一个初始全为111的序列aaa,有两种操作: MULTIPLY l r:将区间[ ...

  5. [计蒜之道2019 复赛 A]外教 Michale 变身大熊猫 (线段树求LIS+思维)

    外教变身萌翻小学员,VIPKID "AR 变脸" 打造趣味互动课堂,这是在线少儿英语品牌 VIPKID 全新推出的辅助教学功能--AR 变脸,外教在上课过程中可以随意选取合适的表情 ...

  6. AtCoder Regular Contest 085 F NRE 线段树优化dp

    题意 有长度为n初始全为0的数组A和仅由0和1组成的数组B.现在给出m个区间,每次可以选择某个区间[l,r],使得A数组下标在[l,r]之间的元素变为1.问A和B最小不同位置数量是多少. n,m< ...

  7. HDU 6638 [2019 Multi-University Training Contest 6]

    Snowy Smile Problem Description There are n pirate chests buried in Byteland, labeled by 1,2,-,n. Th ...

  8. HDU 2019 Multi-University Training Contest 1 杭电2019多校联合训练赛 第一场 1001 Blank (6578)

    HDU 2019 Multi-University Training Contest 1 杭电2019暑期多校集训第一场 1001 Blank (6578) Problem Description T ...

  9. 2019 Multi-University Training Contest 7 部分补题

    2019 Multi-University Training Contest 7 部分补题 这场比赛三个人一起组队,比赛期间自己感觉并没有奉献多少东西,所以补题.而且总感觉比赛到后期很乏力(没力气那种 ...

  10. Sichuan University Programming Contest 2018 Preliminary

    嗯为了防止大家AK,所以这次的A题和K题我们就当做不存在好了! 经历了昨天写了两个多小时的博客没保存的心态炸裂,今天终于下了个Markdown.所以我猜这篇的格式应该会更好看一点! 好吧废话不多说 题 ...

最新文章

  1. php expat+DOM+SimpleXML XML读取
  2. python 矩阵基础
  3. BZOJ-1192-鬼谷子的钱袋
  4. 数据可视化的基本原理——视觉通道
  5. 八皇后问题详解(最短代码)
  6. 科技最前沿!Adobe提出自动生成高质量合成图像新方法
  7. springcloud生产环境一般怎么部署_机器学习模型生产环境部署的四种系统架构总结...
  8. Vue源码解读之事件机制
  9. 天龙八部科举答题问题和答案(全1/8)
  10. Xsens MVN Analyze高精度惯性动作捕捉系统Link版
  11. 扁平化设计与质感设计: 他们有什么不同?
  12. Fuchsia编译系统的GN结构
  13. 第39章 连续时间信号与系统的S域分析
  14. java即时编译器_即时编译器 (JIT) 详解
  15. 第10章 51PC实物制作
  16. shell脚本 sed工具
  17. 2022全国职业技能大赛-网络安全赛题解析总结⑤(超详细)
  18. Excel 2010 SQL应用039 计算员工社会保险缴纳金额
  19. 【c语言】链表(完整版)
  20. URP从原理到应用——进阶篇

热门文章

  1. [剑指offer]-导航总结篇
  2. linux 密码字典生成,Linux下的字典生成工具Crunch 创造自己的专属字典
  3. python 等差数列_413. 等差数列划分(Python)
  4. 如何听清楚、说明白--《结构思考力》
  5. 从源码分析Redis分布式锁的原子性保证
  6. 论文笔记 | 用户画像
  7. ASP.NET Core 运行原理解剖[2]-Hosting补充之配置介绍
  8. Crazy bubbles
  9. 洛谷P1540机器翻译
  10. python 期货程序化_文华财经程序化以外,Python量化是更好的选择