题意:有n个点(n<=2000),每个点都有价值,求一个矩形内所有点价值和的最大值是多少

一维的静态最大子段和用dp在O(n)时间内解决,带修改查询区间最大子段和可以用线段树区间合并O(nlogn)写

二维的最大子矩阵和可以通过压行再dpO(n^3)写。

这题对坐标离散化一下就转化为求最大子矩阵和的问题了,然后n^3肯定是不行的,然后利用离散后是2000*2000的图上有2000个点,矩阵很稀疏这个性质,可以通过枚举起始行s,终点行e,用然后用线段树维护s~e行,每列的信息,转化为一维最大子段和来算。每次枚举起始行时都要重新建树,然后枚举终点行时,都把这行的信息更新到线段树里去,复杂度是n(nlogn(建树)+nlogn(更新)),这题关键是有效点很少只有n个,如果是n^2个就没了。

#include<bits/stdc++.h>
using namespace std;
#define ls rt<<1
#define rs (rt<<1)+1
#define ll long long
#define fuck(x) cout<<#x<<"     "<<x<<endl;
typedef pair<int,int>pii;
const ll inf=9e18;
const int maxn=2000+10;
int d[4][2]={1,0,-1,0,0,1,0,-1};
vector<pii>row[maxn];
struct node{int x,y,w;
}p[maxn];
int lshx[maxn],lshy[maxn],cnt1,cnt2;
ll maxx[maxn<<2],lmaxx[maxn<<2],rmaxx[maxn<<2],sum[maxn<<2];
void pushup(int rt)
{sum[rt]=sum[ls]+sum[rs];lmaxx[rt]=max(lmaxx[ls],sum[ls]+lmaxx[rs]);rmaxx[rt]=max(rmaxx[rs],sum[rs]+rmaxx[ls]);maxx[rt]=max(maxx[ls],maxx[rs]);maxx[rt]=max(maxx[rt],rmaxx[ls]+lmaxx[rs]);
}
void update(int rt,int L,int R,int pos,int val){if(L==R){sum[rt]+=val;maxx[rt]=lmaxx[rt]=rmaxx[rt]=max(0LL,sum[rt]);return ;}int mid=(L+R)>>1;if(pos<=mid)update(ls,L,mid,pos,val);elseupdate(rs,mid+1,R,pos,val);pushup(rt);
}
int main(){int t,n;ll ans;scanf("%d",&t);while(t--){ans=-inf;cnt1=cnt2=0;scanf("%d",&n);for(int i=1;i<=n;i++) row[i].clear();for(int i=1;i<=n;i++) scanf("%d%d%d",&(p[i].x),&(p[i].y),&(p[i].w)),lshx[++cnt1]=p[i].x,lshy[++cnt2]=p[i].y;sort(lshx+1,lshx+cnt1+1);sort(lshy+1,lshy+cnt2+1);cnt1=unique(lshx+1,lshx+cnt1+1)-lshx-1;cnt2=unique(lshy+1,lshy+cnt2+1)-lshy-1;for(int i=1;i<=n;i++){int tmpx,tmpy;tmpx=lower_bound(lshx+1,lshx+cnt1+1,p[i].x)-lshx;tmpy=lower_bound(lshy+1,lshy+cnt2+1,p[i].y)-lshy;row[tmpx].push_back(make_pair(tmpy,p[i].w));}for(int i=1;i<=cnt1;i++){for(int j=1;j<=cnt2*4;j++)maxx[j]=lmaxx[j]=rmaxx[j]=sum[j]=0;for(int j=i;j<=cnt1;j++){for(int k=0;k<row[j].size();k++)update(1,1,cnt2,row[j][k].first,row[j][k].second);ans=max(ans,maxx[1]);}}printf("%lld\n",ans);}return 0;
}

HDU多校第六场——HDU6638 Snowy Smile(线段树区间合并)相关推荐

  1. HDU多校4 - 6992 Lawn of the Dead(线段树+模拟)

    题目链接:点击查看 题目大意:给出一个 n∗mn*mn∗m 的矩阵,有 kkk 个点被 banbanban 掉了,现在从点 (1,1)(1,1)(1,1) 出发,只能向右或向下移动,问可以到达的点有多 ...

  2. hdu 5367(线段树+区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5367 官方题解: 对于求"高山脉"长度,可以利用线段树.树节点中保存左高度连续长度 ...

  3. HDU - 5381 The sum of gcd(莫队/线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,再给出 mmm 次询问,每次询问需要回答区间 [L,R][L,R][L,R] 内所有子区间的 gcdgcdgcd 之和.更具体的,对于询问 ...

  4. 2021牛客多校7 - xay loves monotonicity(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数字序列 aaa 和 010101 序列 bbb,需要执行 mmm 次操作,每次操作分为如下三种类型: 1 x y:修改 a[x]=ya[x]= ...

  5. hdu 3308 LCIS 线段树 + 区间合并

    传送门 文章目录 题意: 思路: 题意: 思路: 日常水一篇题解. 带修改的求区间连续的递增序列,我们考虑用线段树维护. 直接维护mlenmlenmlen是区间最长的递增序列,lslsls是从左端点开 ...

  6. HDU 4533 威威猫系列故事――晒被子(线段树区间更新+分情况推公式)

    因为马拉松初赛中吃鸡腿的题目让不少人抱憾而归,威威猫一直觉得愧对大家,这几天他悄悄搬到直角坐标系里去住了.  生活还要继续,太阳也照常升起,今天,威威猫在第一象限晒了N条矩形的被子,被子的每条边都和坐 ...

  7. hdu 1540 Tunnel Warfare(线段树区间合并)

    hdu 1540 Tunnel Warfare 记录每个节点的最大左连续值.最大右连续值.最大连续值,向上更新的是常规的区间合并处理方式 关键是想到如何去查询,如果查询节点落在左儿子节点的右连续段中, ...

  8. HDU 1540 Tunnel Warfare 线段树区间合并

    Tunnel Warfare 题意:D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少 思路:一个节点的最大连续区间由(左儿子的最大的连续区间,右儿子的最大连续区 ...

  9. 2021牛客多校1 - Journey among Railway Stations(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列表示火车站,每个火车站都有两个属性 [u,v][u,v][u,v],表示在站时间.相邻两个火车站之间有一个距离,即从第 iii 个火车站到第 ...

  10. HDU - 6406 Taotao Picks Apples(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,再给出 m 次询问,每次询问假设如果设置 a[ pos ] = val 的话,那么此时序列中的最长上升子序列是多少,此时的上升子序列指的是 ...

最新文章

  1. openjdk linux tomcat,linux下配置安装OpenJDK+Tomcat(示例代码)
  2. java基础学完就直接学ssm_java基础学习笔记3(SSM基础)
  3. springcloud 03_SpringCloud概述
  4. php制作简单的用户登陆,如何用php代码实现简单的用户登陆以及登陆验证功能
  5. 赋能零售成长型企业营销增长,云徙「数盈·新营销中台」发布
  6. 用VC++绘制位图按钮
  7. java验证码技术_java验证码前台技术
  8. PostFix邮件网关无法向公网投递邮件问题分析
  9. 教学演示软件 模型八 医学的人体模型
  10. android系统字体目录在哪个文件夹,安卓系统System目录下文件夹功能详解
  11. 智能体的奇幻漂流之“成都折叠”篇
  12. 一种确定六边形螺栓中心(形心)的Opencv方法——Python实现
  13. Java 一元、二元运算符、三目条件运算符(三元运算符)
  14. RestTemplateConfig
  15. sysbench--实践--02--CPU测试
  16. hitTest:(CGPoint)point withEvent:(UIEvent *)event
  17. fatal: unable to access ‘https://github.com/golang/tools.git/‘: Encountered end of file
  18. 在Linux环境下 nginx 部署vue打包项目
  19. Redis 的 MOVED 转向与 ASK 转向
  20. keyshot分辨率多少合适_keyshot电脑配置浅谈

热门文章

  1. 浅谈ES6基础——Promise
  2. Navicat Premium 15 注册出现 No All Pattern Found! File Already Patched?
  3. Codeforces Round #531 (Div. 3) F.Elongated Matrix(状压dp)
  4. 卸载Docker CE
  5. 【python 淘宝爬虫】淘宝信誉分抓取
  6. linux huge模式设置,Linux 下 Hugepages的配置
  7. CMD命令查看WiFi密码
  8. 展望|人脸识别技术发展现状及未来趋势
  9. visio画立体图_Microsoft Office Visio绘制三维正方体图形的详细操作步骤
  10. matlab 类型强制转换,关于数据类型强制转换的分析和应用