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 公…

Interesting Finds: 2008.03.24

.NET: C#正则表达式整理备忘 谈谈volatile变量 Other: PTOM: The Open Closed Principle Calculating pi with C# - Calculate PI using C# Regular Expression Workbench - a free and opensource option for RegexBuddy 转载于:https://www.cnblogs.com/gOODiDEA/archive/2…

如何利用openSsl来计算一个文件的md5值?

openssl环境的配置&#xff0c; 我就不再说了。在本文中&#xff0c; 我们来讨论一个文件的md5值&#xff0c; 废话少说&#xff0c; 直接给大家代码&#xff0c; 上点干货&#xff1a; [cpp] view plaincopy #include <iostream> #include <openssl/md5.h> // 如…

qs文档翻译

安装&#xff1a; npm install qs --save-dev 基本用法&#xff1a; 1 let qs require(qs);2 let assert require(assert);3 4 5 //qs.parse(ac)将字符串等式转换为对象6 let obj qs.parse(ac);7 console.log(obj)//{a:c}8 9 //qs.stringify(obj)将对象转化为字符串等式 10 …

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…

利用openssl来计算sha1, sha224, sha256, sha384, sha512

转载&#xff1a;http://blog.csdn.net/stpeace/article/details/42371079 利用openssl来计算sha1, sha224, sha256, sha384, sha512&#xff0c;前提是已经配置了openssl的环境&#xff1a; 代码如下&#xff1a; [cpp] view plaincopy #include <iostream> #include…

WCF简单教程(6) 单向与双向通讯

第六篇&#xff1a;单向与双向通讯 项目开发中我们时常会遇到需要异步调用的问题&#xff0c;有时忽略服务端的返回值&#xff0c;有时希望服务端在需要的时候回调&#xff0c;今天就来看看在WCF中如何实现。 先看不需要服务端返回值的单向调用&#xff0c;老规矩&#xff0c;直…

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缓存&…

利用openssl来计算sha256哈希值

先配置openssl, 我就不再赘述了&#xff0c; 直接给出代码&#xff1a; [cpp] view plaincopy #include <iostream> #include <openssl/sha.h> // 如果你直接拷贝我的程序运行&#xff0c; 那注定找不到sha.h #pragma comment(lib, "libeay32.lib") …

CuteEditor6.0使用配置心得体会(转)

CuteEditor是一款功能非常强大&#xff0c;支持图片上传、文件下载和word类似的文字编辑器。并且Vs2003和Vs2005都可以适用。对于新闻发布系统和博客之类的系统&#xff0c;是非常的方便的。对一个刚接触这款编辑器的朋友来说或许会遇到和我一样的许多问题&#xff0c;现在我就…

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

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

html字符串生成器源代码

#-*-coding:utf-8-*-#-*-coding:big5-*-#-*-coding:cp936-*-import Tkinterimport tkFileDialogimport osimport tkMessageBoximport shutilurlnew""#文件打开def manipuOpen(): url tkFileDialog.askopenfilename(title 打开html文件, #创建打开文件对话框…

一个莫名的人,竞标,教训,韩国女人

今天处理了"竞标公司"的后遗症。 教训&#xff1a;以后千万不要轻易把自己的手机号码留给其他的公司&#xff0c;否则他会不停的骚扰你 认识一个奇怪的人&#xff0c;去了解了他&#xff0c;不知道是男是女&#xff0c;和那个穿韩国衣服的女人一样 以前借了另外一个人…

如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?

转载&#xff1a;http://blog.csdn.net/stpeace/article/details/41922115 openssl的库的用法&#xff0c; 前面已经介绍了&#xff0c; 所以不再啰嗦&#xff0c; 直接给出代码&#xff1a; [cpp] view plaincopy // openssl的库的用法&#xff0c; 前面已经介绍了&#xff0c…

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

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