Multidimensional Queries(二进制枚举+线段树+Educational Codeforces Round 56 (Rated for Div. 2))...

题目链接:

  https://codeforces.com/contest/1093/problem/G

题目:

题意:

  在k维空间中有n个点,每次给你两种操作,一种是将某一个点的坐标改为另一个坐标,一种操作是查询[l,r]中曼哈顿距离最大的两个点的最大曼哈顿距离。

思路:

  对于曼哈顿距离,我们将其绝对值去掉会发现如下规律(以二维为例):

    

  故这题我们可以用线段树来维护[l,r]中上述每种情况的最大值和最小值,用二进制来枚举xy的符号(1为正,0为负),最后答案是 每种情况中区间最大值-区间最小值 的最大值。

代码实现如下:

  1 #include <set>
  2 #include <map>
  3 #include <deque>
  4 #include <queue>
  5 #include <stack>
  6 #include <cmath>
  7 #include <ctime>
  8 #include <bitset>
  9 #include <cstdio>
 10 #include <string>
 11 #include <vector>
 12 #include <cstdlib>
 13 #include <cstring>
 14 #include <iostream>
 15 #include <algorithm>
 16 using namespace std;
 17 
 18 typedef long long LL;
 19 typedef pair<LL, LL> pLL;
 20 typedef pair<LL, int> pli;
 21 typedef pair<int, LL> pil;;
 22 typedef pair<int, int> pii;
 23 typedef unsigned long long uLL;
 24 
 25 #define lson rt<<1
 26 #define rson rt<<1|1
 27 #define lowbit(x) x&(-x)
 28 #define  name2str(name) (#name)
 29 #define bug printf("*********\n")
 30 #define debug(x) cout<<#x"=["<<x<<"]" <<endl
 31 #define FIN freopen("D://code//in.txt", "r", stdin)
 32 #define IO ios::sync_with_stdio(false),cin.tie(0)
 33 
 34 const double eps = 1e-8;
 35 const int mod = 1000000007;
 36 const int maxn = 2e5 + 7;
 37 const double pi = acos(-1);
 38 const int inf = 0x3f3f3f3f;
 39 const LL INF = 0x3f3f3f3f3f3f3f3fLL;
 40 
 41 int n, k, q, op, x, l, r;
 42 int a[maxn][10], num[10];
 43 
 44 struct node {
 45     int l, r, mx, mn;
 46 }segtree[maxn<<2][33];
 47 
 48 void push_up(int rt, int pp) {
 49     segtree[rt][pp].mx = max(segtree[lson][pp].mx, segtree[rson][pp].mx);
 50     segtree[rt][pp].mn = min(segtree[lson][pp].mn, segtree[rson][pp].mn);
 51 }
 52 
 53 void build(int rt, int l, int r, int pp) {
 54     segtree[rt][pp].l = l, segtree[rt][pp].r = r;
 55     segtree[rt][pp].mx = segtree[rt][pp].mn = 0;
 56     if(l == r) {
 57         for(int i = 0; i < k; i++) {
 58             if(pp & (1<<i)) {
 59                 segtree[rt][pp].mx += a[l][i];
 60                 segtree[rt][pp].mn += a[l][i];
 61             } else {
 62                 segtree[rt][pp].mx -= a[l][i];
 63                 segtree[rt][pp].mn -= a[l][i];
 64             }
 65         }
 66         return;
 67     }
 68     int mid = (l + r) >> 1;
 69     build(lson, l, mid, pp);
 70     build(rson, mid + 1, r, pp);
 71     push_up(rt, pp);
 72 }
 73 
 74 void update(int rt, int pos, int pp) {
 75     if(segtree[rt][pp].l == segtree[rt][pp].r) {
 76         segtree[rt][pp].mx = segtree[rt][pp].mn = 0;
 77         for(int i = 0; i < k; i++) {
 78             if(pp & (1<<i)) {
 79                 segtree[rt][pp].mx += num[i];
 80                 segtree[rt][pp].mn += num[i];
 81             } else {
 82                 segtree[rt][pp].mx -= num[i];
 83                 segtree[rt][pp].mn -= num[i];
 84             }
 85         }
 86         return;
 87     }
 88     int mid = (segtree[rt][pp].l + segtree[rt][pp].r) >> 1;
 89     if(pos <= mid) update(lson, pos, pp);
 90     else update(rson, pos, pp);
 91     push_up(rt, pp);
 92 }
 93 
 94 int query(int rt, int l, int r, int pp, int op) {
 95     if(segtree[rt][pp].l >= l && segtree[rt][pp].r <= r) {
 96         if(op == 1) {
 97             return segtree[rt][pp].mx;
 98         } else {
 99             return segtree[rt][pp].mn;
100         }
101     }
102     int mid = (segtree[rt][pp].l + segtree[rt][pp].r) >> 1;
103     if(r <= mid) return query(lson, l, r, pp, op);
104     else if(l > mid) return query(rson, l, r, pp, op);
105     else {
106         if(op == 1) return max(query(lson, l, mid, pp, op), query(rson, mid + 1, r, pp, op));
107         else return min(query(lson, l, mid, pp, op), query(rson, mid + 1, r, pp, op));
108     }
109 }
110 
111 int main(){
112 #ifndef ONLINE_JUDGE
113     FIN;
114 #endif
115     scanf("%d%d", &n, &k);
116     for(int i = 1; i <= n; i++) {
117         for(int j = 0; j < k; j++) {
118             scanf("%d", &a[i][j]);
119         }
120     }
121     for(int i = 0; i < (1<<k); i++) {
122         build(1, 1, n, i);
123     }
124     scanf("%d", &q);
125     while(q--) {
126         scanf("%d", &op);
127         if(op == 1) {
128             scanf("%d", &x);
129             for(int i = 0; i < k; i++) {
130                 scanf("%d", &num[i]);
131             }
132             for(int i = 0; i <(1<<k); i++) {
133                 update(1, x, i);
134             }
135         } else {
136             scanf("%d%d", &l, &r);
137             int mx = -inf;
138             for(int i = 0; i < (1<<k); i++) {
139                 mx = max(mx, query(1, l, r, i, 1) - query(1, l, r, i, 2));
140             }
141             printf("%d\n", mx);
142         }
143     }
144     return 0;
145 }

 

转载于:https://www.cnblogs.com/Dillonh/p/10125587.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

poj 3342

概率dp&#xff0c;不解释。 View Code #include<iostream>#include<map>#include<cstdio>#include<vector>using namespace std;const int maxn201;int dp[210][2];vector<int>edge[maxn];void dfs(int u,int p){int i,j; dp[u][1]1;dp[u][…

最全是一次I2C总结

博主将 I2C spec 文章总结为一篇&#xff0c;目录如下I2C Introduction I2C Architecture I2C Transfer I2C Synchronization And Arbitration I2C Hs-mode1、I2C Introduction1、I2C 历史I2C&#xff1a;Inter-Integrated Circuit&#xff0c;集成电路总线。I2C 是 Philips 公…

Lync Server 2010标准版系列PART6:启用Lync

在我们花费了众多的精力和时间之后&#xff0c;我们终于完成了Lync Server标准版的搭建&#xff0c;接下来当然是为我们AD中的用户启用Lync&#xff0c;来看下我们的部署成果。首先我们需要在AD中创建两个帐户&#xff0c;这样便于我们后期的测试&#xff0c;在DC上打开AD用户和…

8位MCU跑RTOS有没有意义?

相信大多数人在学习单片机的时候&#xff0c;都是从最基本的8位MCU开始的。一般来说&#xff0c;8位单片机最常见的是三个系列是&#xff1a;51系列、AVR系列、PIC系列。而前段时间&#xff0c;群里讨论了一个问题&#xff1a;在51单片机上跑RTOS有没有意义&#xff1f;关于这个…

ViewState机制由浅入深1

1 ViewState机制是什么&#xff1f; ViewState机制是asp.net中对同一个Page的多次请求&#xff08;PostBack&#xff09;之间维持Page及控件状态的一种机制。在WebForm中每次请求完&#xff0c;Page对象都会被释放&#xff0c;对同一个Page的多次请求之间的状态信息&am…

关于bc中小数点length,scale,(())以及进制转换

这是我在codewar上遇到的一个题&#xff0c;我用我自己的方法做出了解答&#xff0c;如下&#xff1a; 1 #!/bin/bash2 3 distanceecho "$1*10000"|bc|cut -d"." -f14 a05 n16 7 if [ $distance -le 0 ];then8 echo None9 else 10 while [ $n -lt $di…

5V串口接3.3V单片机串口怎么搞?

写在前面&#xff1a;两个单片机由于电平不同&#xff0c;串口通信可能会失败&#xff0c;这时候需要通过电平转换电路来解决&#xff0c;本文给出了两种方法&#xff0c;一种是通过三极管搭建&#xff0c;另一种是MOS管搭建&#xff0c;在硬件工程师的笔试中也经常会出现这样的…

Django之缓存、信号和图片验证码

一、 缓存 1、 介绍 缓存通俗来说&#xff1a;就是把数据先保存在某个地方&#xff0c;下次再读取的时候不用再去原位置读取&#xff0c;让访问速度更快。 缓存机制图解 2、Django中提供了6种缓存方式 1. 开发调试   2. 内存   3. 文件   4. 数据库   5. Memcache缓存&…

这焊接技术在班里排名第一没问题吧?

晚上和朋友讨论PCB LAYOUT&#xff0c;然后自己也动手起来了&#xff0c;刚好看到宇哥的一篇焊接的文章&#xff0c;这焊接技术这么厉害的人&#xff0c;layout那不得是吊炸天啊。作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xf…

Yocto,嵌入式开发者不可不知的强大工具【附资料与活动】

各个嵌入式开发团队出于不同的原因&#xff0c;都希望构建适合自己开发需求的嵌入式系统。Yocto正是这样一个工具&#xff0c;任何一个厂商都可以根据Yocto定制属于自己的系统。 Yocto 是什么 Yocto 是一种伞式项目&#xff0c;侧重于通过开放式嵌入内核&#xff0c;打造嵌入式…

第四次过程性考核

https://gitee.com/liuji1/fourth_process_assessment (一) 问题&#xff1a;使用套接写连接编写一个简单的聊天室程序&#xff0c;客户端主函数放在Client_Main.java文件中&#xff0c;服务器端主函数放在Server_Main.java文件中 (二) 要求&#xff1a; 1.客户端从控制台进行…

劝你不要转行

在知乎收到一个咨询&#xff0c;问题如下您好&#xff0c;想向您请教一些问题。想转行做嵌入式工程师个人基本信息29岁&#xff0c;电子与通信工程专业硕士&#xff0c;毕业后就职于某车企&#xff0c;主要从事类似项目管理一职。去年考入某事业单位&#xff0c;业余时间相对较…

linux下DHCP的安装配置

今天在整理以前的资料的时候&#xff0c;看到了这篇过去积攒的资料&#xff0c;过程详细所以拿来给大家一块分享&#xff0c;同时我也在做&#xff0c;提高一下熟练度。 【实验名称】Linux下DHCP服务的配置与安装【实验拓扑】【实验目标】了解DHCP服务的工作原理&#xff0c;掌…

浅谈一下嵌入式中的强符号和弱符号

__attribute__ 是一个编译器指令&#xff0c;其实是 GNU C 的一种机制&#xff0c;本质是一个编译器的指令&#xff0c;在声明的时候可以提供一些属性&#xff0c;在编译阶段起作用&#xff0c;来做多样化的错误检查和高级优化。用于在 C、C、Objective-C 中修饰变量、函数、参…

POJ_1862 Stripies 【贪心】

一、题面 POJ1862 二、分析 反省一下&#xff0c;自己英语水平着实不行&#xff0c;该题其实就是问若给出若干个这种生物&#xff0c;根据这种体重变换方式&#xff0c;最终合并成一个后&#xff0c;体重最少是多少。根据公式 $m 2\sqrt{m_{1}m_{2}}$ 我们可以发现&#xff0c…

想成为硬件工程师,难不?

有很多朋友经常会问&#xff0c;成为高级嵌入式系统硬件工程师&#xff0c;需要做到哪些呢?那么&#xff0c;我们就先从嵌入式硬件工程师是个什么概念入手。一、如何理解“嵌入式”的概念呢?1、从硬件上&#xff0c;将基于CPU的处围器件&#xff0c;整合到CPU芯片内部&#x…

.Net/C#中Cache的用法

Cache 即高速缓存&#xff0c;使用合理可以提高网站访问速度&#xff0c;减少服务器压力 什么是缓存&#xff1f;Web 应用程序通常都是被多个用户访问。一个Web站点可能存在一个“重量级”的加载&#xff0c;它能够使得站点在访问的时候&#xff0c;拖慢整个服务器。当站点被大…

Maven继承

继承为了消除重复&#xff0c;可以把pom 中很多相同的配置提取出来&#xff1b;如&#xff1a;grouptId&#xff0c; version 等。 在使用的时候子工程直接继承父工程的依赖版本号&#xff0c;子工程中不再需要指定具体版本号&#xff0c;方便统一管控项目的依赖版本问题。 创建…

电子驱蚊器就是智商税

说下我的情况我家不能烧蚊香&#xff0c;因为我们领导说家里有小孩&#xff0c;蚊香对小孩很不好&#xff0c;这是楠哥的锅&#xff0c;我不背。但是我又不喜欢挂蚊帐&#xff0c;总觉得蚊帐挂起来后觉得很压抑&#xff0c;黑乎乎的感觉。所以能不挂的时候就不挂&#xff0c;然…

串口通讯到底有没有累积误差及对时钟精度的要求

1. 问题背景&#xff1a;2. 问题分析:3. 总结:1. 问题背景&#xff1a; 对于嵌入式开发者来说&#xff0c;串口应该是应用最广泛的模块&#xff0c;在日常客户支持过程中经常会有客户问到一些关于串口通讯稳定性的问题&#xff0c;比较典型的几个问题如下&#xff1a;在9600波特…