2018-2019 ACM-ICPC, Asia Shenyang Regional Contest E. The Kouga Ninja Scrolls 切比雪夫距离 +线段树
传送门
将曼哈顿距离转换成切比雪夫距离,现在就是求max(∣x1−x2∣,∣y1−y2∣)max(|x_1-x_2|,|y_1-y_2|)max(∣x1−x2∣,∣y1−y2∣),显然我们可以将x,yx,yx,y分开考虑,下面以xxx为例。
考虑一段区间内不同门派的最大值和最小值,我们可以维护这个区间的最大值和最小值,以及与最大值门派不同的次大值和与最小值门派不同的次小值,这样就不难得出答案了。
#include<bits/stdc++.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define Mid (tr[u].l+tr[u].r>>1)
#define pb push_back
using namespace std;const int N=1000010,INF=0x3f3f3f3f,mod=1e9+7;
typedef long long LL;int n,m;
int a[N],x[N],y[N],z[N];/*
最大值 与最大值门派不同的次大值
最小值 与最小值门派不同的次小值
*/
struct Point {LL val,id;
};
vector<Point>v;bool cmp1(Point a,Point b) {return a.val>b.val;
}bool cmp2(Point a,Point b) {return a.val<b.val;
}struct Seg {struct Node {int l,r;LL maxid[2],minid[2];LL maxval[2],minval[2];}tr[N<<2];void update(Node &u,Node ls,Node rs) {//最大值if(ls.maxval[0]>rs.maxval[0]) swap(ls,rs);u.maxval[0]=rs.maxval[0];u.maxid[0]=rs.maxid[0];//次大值v.clear();v.push_back({ls.maxval[0],ls.maxid[0]});v.push_back({ls.maxval[1],ls.maxid[1]});v.push_back({rs.maxval[1],rs.maxid[1]});sort(v.begin(),v.end(),cmp1);u.maxval[1]=-1e9-1;u.maxid[1]=0;for(auto x:v) if(x.id!=u.maxid[0]&&x.id!=0) {u.maxval[1]=x.val;u.maxid[1]=x.id;break;}//最小值if(ls.minval[0]<rs.minval[0]) swap(ls,rs);u.minval[0]=rs.minval[0];u.minid[0]=rs.minid[0];//次小值v.clear();v.push_back({ls.minval[0],ls.minid[0]});v.push_back({ls.minval[1],ls.minid[1]});v.push_back({rs.minval[1],rs.minid[1]});sort(v.begin(),v.end(),cmp2);u.minval[1]=1e9+1;u.minid[1]=0;for(auto x:v) if(x.id!=u.minid[0]&&x.id!=0) {u.minval[1]=x.val;u.minid[1]=x.id;break;}}void pushup(int u) {update(tr[u],tr[L],tr[R]);}void build(int u,int l,int r) {tr[u]={l,r};if(l==r) {tr[u].maxid[0]=tr[u].minid[0]=z[l];tr[u].maxid[1]=tr[u].minid[1]=0;tr[u].maxval[0]=tr[u].minval[0]=a[l];tr[u].maxval[1]=-1e9-1;tr[u].minval[1]=1e9+1;return;}build(L,l,Mid); build(R,Mid+1,r);pushup(u);}void change_val(int u,int pos,int val) {if(tr[u].l==tr[u].r) {tr[u].maxval[0]+=val;tr[u].minval[0]+=val;return;}if(pos<=Mid) change_val(L,pos,val);else change_val(R,pos,val);pushup(u);}void change_id(int u,int pos,int val) {if(tr[u].l==tr[u].r) {tr[u].maxid[0]=val;tr[u].minid[0]=val;return;}if(pos<=Mid) change_id(L,pos,val);else change_id(R,pos,val);pushup(u);}Node query(int u,int l,int r) {if(tr[u].l>=l&&tr[u].r<=r) return tr[u];if(r<=Mid) return query(L,l,r);else if(l>Mid) return query(R,l,r);else {Node ans,ls,rs;ls=query(L,l,r); rs=query(R,l,r);update(ans,ls,rs);return ans;}}LL get_ans(int l,int r) {Node u=query(1,l,r);LL ans=0;for(int i=0;i<2;i++) {for(int j=0;j<2;j++) {if(u.maxid[i]!=u.minid[j]&&u.maxid[i]!=0&&u.minid[j]!=0) {ans=max(ans,abs(u.maxval[i]-u.minval[j]));}}}return ans;}
}seg[2];void solve() {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d%d%d",&x[i],&y[i],&z[i]);for(int i=1;i<=n;i++) a[i]=x[i]+y[i];seg[0].build(1,1,n);for(int i=1;i<=n;i++) a[i]=x[i]-y[i];seg[1].build(1,1,n);while(m--) {int op; scanf("%d",&op);if(op==1) {int k,x,y;scanf("%d%d%d",&k,&x,&y);seg[0].change_val(1,k,x+y);seg[1].change_val(1,k,x-y);} else if(op==2) {int k,c;scanf("%d%d",&k,&c);seg[0].change_id(1,k,c);seg[1].change_id(1,k,c);} else {int l,r; scanf("%d%d",&l,&r);printf("%lld\n",max(seg[0].get_ans(l,r),seg[1].get_ans(l,r)));}}
}int main() {int _; scanf("%d",&_);for(int i=1;i<=_;i++) {printf("Case #%d:\n",i);solve();}return 0;
}
/*
1
2 1
1 1 1
1 1 2
3 1 26 2
hahaha
*/
2018-2019 ACM-ICPC, Asia Shenyang Regional Contest E. The Kouga Ninja Scrolls 切比雪夫距离 +线段树相关推荐
- 2018-2019 ACM-ICPC, Asia Shenyang Regional Contest E. The Kouga Ninja Scrolls 不容易的线段树 切比雪夫距离
题目链接:http://codeforces.com/gym/101955/problem/E 题意: 二维坐标上给你1e5个人,并且给你这些人分别所属的阵营,现在你有三种操作. 1 k x y: 表 ...
- 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...
- 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A .(2017 ACM ICPC dalian H)To begin or not to be ...
- 2019 ICPC Asia Nanchang Regional K.Tree 树上启发式合并 + 动态开点线段树
传送门 文章目录 题意: 思路: 题意: 给你一棵树,每个点都有一个权值valvalval,求满足以下条件 (1)x!=yx!=yx!=y (2)xxx和yyy不互为祖先 (3)val[lca(x,y ...
- The 2019 ICPC Asia Shanghai Regional Contest
The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...
- 2018 ICPC Asia Jakarta Regional Contest
2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...
- The 2020 ICPC Asia Shenyang Regional Programming Contest I题 Rise of Shadows(数论)
题目链接The 2020 ICPC Asia Shenyang Regional Programming Contest 题目大意: 一天内有H小时,每小时M分钟,时针分针以恒定速率旋转. 现在若时针 ...
- 【题目记录】——The 2021 ICPC Asia Jinan Regional Contest
文章目录 C Optimal Strategy 组合数 H Game Coin K Search For Mafuyu 欧拉序列 题目集地址 The 2021 ICPC Asia Jinan Regi ...
- 2018 ACM-ICPC Asia Shenyang Regional Contest 题解(9 / 13)【每日亿题2021/2/24】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2018 ACM-ICPC Shenyang J)How Much Memory Your ...
最新文章
- mysql导入数据io异常_mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结
- 开关电源过流保护-打嗝模式
- 124. Binary Tree Maximum Path Sum 二叉树中的最大路径和
- 服务自动拉起,定时日志清理,数据统计的shell脚本
- 《电子元器件的可靠性》——3.3节可靠性筛选试验
- 服务器频繁重启怎么解决
- matlab读取sgy格式文件的m文件,matlab读取segy格式的文件
- C盘hiberfil.sys文件可以删除吗?法2(推荐)
- FC光钎通道交换机,同行性价比超高
- 一文了解滴滴与蚂蚁金服开源共建的SQLFlow
- Windows XP中的命令行界面
- MATLAB app designer GUI设计
- 千梦网创108计第三十六计:当地人才招聘网,一个年入50W的战友实操案例
- 4.5 GPO的编辑
- 电脑右下角网络图标有个红叉但是可以上网
- 什么是SAP Cloud Platform(SAP云平台) ?
- java可视化图表_8个华丽而实用的Java图表应用
- Java简繁体转换分享
- 使用nmcli配置主备模式链路聚合(team端口绑定)
- 前端练习41 数组的空位填充
热门文章
- 人生没有对与错,只是选择不同
- 这个黑科技小音箱,不用连蓝牙、一触即播
- 各种震撼的慢镜头,奇怪的知识又增加了!​
- 这个被称为20世纪最伟大人物的最强理科生,到底有多强,你根本不了解
- 全网爆红!全新洗脑神曲:程序员Disco
- mysql 1054 42s22_MySQL ERROR 1054(42S22)
- getchar()到底怎么用_怎样才能真正发挥肥效,腐植酸水溶肥到底怎么用
- qt4.7 mysql_详解Qt 4.7编译和访问Mysql驱动
- sql 计算 某字段 不同值出现 的次数_教你如何合理选用和计算电线规格,电线回路分配和注意事项...
- linux备份文件到ftp上,Linux服务器下用FTP上传下载备份文件