题意:给定N个K维的点,Q次操作,或者修改点的坐标;或者问[L,R]这些点中最远的点。

思路:因为最后一定可以表示维+/-(x1-x2)+/-(y1-y2)+/-(z1-z2).....

所以我们可以保存到线段树里,每次求区间最大值和最小值即可。

注意到我们可以先确定一个点的正负号,所以时间和空间节省了一半。

#include<bits/stdc++.h>
#define mp make_pair
#define pii pair<int,int>
#define F first
#define S second
#define lson Now<<1
#define rson Now<<1|1
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int inf=;
struct T
{
int Mx[maxn],Mn[maxn];
void update(int Now,int L,int R,int pos,int val)
{
if(L==R){ Mn[Now]=Mx[Now]=val; return ;}
int Mid=(L+R)>>;
if(pos<=Mid) update(lson,L,Mid,pos,val);
else update(rson,Mid+,R,pos,val);
Mx[Now]=max(Mx[lson],Mx[rson]); Mn[Now]=min(Mn[lson],Mn[rson]);
}
pii query(int Now,int L,int R,int l,int r)
{
if(l<=L&&r>=R) return mp(Mx[Now],Mn[Now]);
int Mid=(L+R)>>; int mx=-inf,mn=inf; pii tmp;
if(l<=Mid){
tmp=query(lson,L,Mid,l,r);
mx=max(mx,tmp.F); mn=min(mn,tmp.S);
}
if(r>Mid){
tmp=query(rson,Mid+,R,l,r);
mx=max(mx,tmp.F); mn=min(mn,tmp.S);
}
return mp(mx,mn);
}
}t[];
int main()
{
int N,K,M,opt,L,R,p,x[],KK;
scanf("%d%d",&N,&K); KK=(<<(K-))-;
rep(i,,KK){
rep(j,,N*) t[i].Mn[j]=inf,t[i].Mx[j]=-inf;
}
rep(i,,N){
rep(j,,K-) scanf("%d",&x[j]);
rep(j,,KK) {
int tmp=;
rep(k,,K-) if(j&(<<k)) tmp+=x[k];else tmp-=x[k];
t[j].update(,,N,i,tmp);
}
}
scanf("%d",&M);
rep(i,,M){
scanf("%d",&opt);
if(opt==){
scanf("%d%d",&L,&R);
int ans=-inf; pii tmp;
rep(j,,KK){
pii tmp=t[j].query(,,N,L,R);
ans=max(ans,tmp.F-tmp.S);
ans=max(ans,tmp.S-tmp.F);
}
printf("%d\n",ans);
}
else {
scanf("%d",&p); rep(j,,K-) scanf("%d",&x[j]);
rep(j,,KK) {
int tmp=;
rep(k,,K-) if(j&(<<k)) tmp+=x[k];else tmp-=x[k];
t[j].update(,,N,p,tmp);
}
}
}
return ;
}

CodeForces - 1093G:Multidimensional Queries (线段树求K维最远点距离)的更多相关文章

  1. Codeforces 1093G题解(线段树维护k维空间最大曼哈顿距离)

    题意是,给出n个k维空间下的点,然后q次操作,每次操作要么修改其中一个点的坐标,要么查询下标为[l,r]区间中所有点中两点的最大曼哈顿距离. 思路:参考blog:https://blog.csdn.n ...

  2. CF 1093G Multidimensional Queries——线段树(消去绝对值符号)

    题目:http://codeforces.com/contest/1093/problem/G 只好看看题解:https://codeforces.com/blog/entry/63877 主要是把绝 ...

  3. Codeforces 1117G Recursive Queries [线段树]

    Codeforces 洛谷:咕咕咕 思路 设\(L_i,R_i\)为\(i\)左右第一个大于它的位置. 对于每一个询问\(l,r\),考虑区间每一个位置的贡献就是\(\min(r,R_i-1)-\ma ...

  4. Codeforces 145E Lucky Queries 线段树

    Lucky Queries 感觉是很简单的区间合并, 但是好像我写的比较麻烦. #include<bits/stdc++.h> #define LL long long #define f ...

  5. [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)

    [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...

  6. [Codeforces 316E3]Summer Homework(线段树+斐波那契数列)

    [Codeforces 316E3]Summer Homework(线段树+斐波那契数列) 顺便安利一下这个博客,给了我很大启发(https://gaisaiyuno.github.io/) 题面 有 ...

  7. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  8. UVA 11983 Weird Advertisement --线段树求矩形问题

    题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...

  9. UVA 11983 Weird Advertisement(线段树求矩形并的面积)

    UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...

随机推荐

  1. Thunder团队Final版本控制

    Final版本控制报告 团队介绍:Thunder Check in次数 :6次. check in log(时间.人员.message.动机.其他解释) 代码贡献量.代码贡献比例以及代码作用 git链 ...

  2. /etc/fstab 文件解析

    首先介绍一下fstab :这个文件描述系统中各种文件系统的信息.一般而言,应用程序仅读取这个文件,而不对它进行写操作.对它的维护是系统管理员的工作.在这个文件中,每个文件系统用一行来描述,在每一行中, ...

  3. vue.js选择if(条件渲染)详解

    vue.js选择if(条件渲染)详解 一.总结 一句话总结: v-if <!DOCTYPE html> <html lang="en"> <head& ...

  4. Java成员变量和局部变量

    Java成员变量和局部变量 一.成员变量和局部变量 二.static关键字 三.成员变量和静态变量区别 四.main函数 五.静态函数什么时候用 六.静态代码块 七.构造代码块 构造代码块先于构造函数 ...

  5. Jersey 2.x JDK 上的客户端应用

    如应用是运行在 JDK 上的话,你只需要使用 JAX-RS 中的客户端部分就可以了,这个根据你使用的客户端有所调整. 这里有一系列的模块是可以供你使用的,例如 grizzly 或 apache 或 j ...

  6. PHP函数总结 (五)

    <?php /** * 回调函数: * 指调用函数时并不是传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中 * 使用回调函数可以 将一段自己定义的功能传到函数内部使用 * ...

  7. devilbox(三):在docker中启动带密码的redis数据库

    背景概述: 之前是使用docker搭建了一套集成的开发环境devilbox,也说了这个环境可以自定义.其实搭建这个环境一是为了练习docker使用,二是搭建我们测试环境,主要用到各种数据库,然而安装教 ...

  8. Linux文件与目录管理(二)

    一.处理目录的常用命令 ls:列出目录 cd:切换目录 pwd:显示当前的目录 mkdir:创建一个新的目录 rmdir:删除一个空的目录 cp:复制文件或者目录 rm:移除文件或者目录 可以使用ma ...

  9. JVM笔记(三) 垃圾收集器(2)收集算法

    垃圾收集器2:收集算法 主要通过阅读<深入了解Java虚拟机>(周志明 著)和网络资源汇集而成,为本人学习JVM的笔记.同时,本文理论基于JDK 1.7版本,暂不考虑 1.8和1.9 的新 ...

  10. UVALive 4168

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA08AAABMCAIAAAA6IBt+AAAgAElEQVR4nO1dybXjOg7tWJSK65yKxL