CF 1093G Multidimensional Queries——线段树(消去绝对值符号)
题目:http://codeforces.com/contest/1093/problem/G
只好看看题解:https://codeforces.com/blog/entry/63877
主要是把绝对值符号消掉,变成枚举正负。因为答案不会变差,所以不用管符号应该是什么,直接对应地取 max 、 min 即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ls Ls[cr]
#define rs Rs[cr]
using namespace std;
const int N=2e5+5,M=N<<1,K=10,tK=35,INF=5e6+5;
int n,k,lm,bin[K],Q,a[N][K],tot,Ls[M],Rs[M];
int Mx(int a,int b){return a>b?a:b;}
int Mn(int a,int b){return a<b?a:b;}
struct Node{
int mx[tK],mn[tK];
Node operator+ (const Node &b)const
{
Node c;
for(int i=0;i<lm;i++)
{
c.mx[i]=Mx(mx[i],b.mx[i]);
c.mn[i]=Mn(mn[i],b.mn[i]);
}
return c;
}
}sm[M];
int rdn()
{
int ret=0;bool fx=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}
while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();
return fx?ret:-ret;
}
void dfs(int cr,int lj,int s,int id,int bh)
{
if(cr>k)
{
sm[bh].mn[s]=sm[bh].mx[s]=lj;
return;
}
dfs(cr+1,lj+a[id][cr],s|bin[cr],id,bh);
dfs(cr+1,lj-a[id][cr],s,id,bh);
}
void build(int l,int r,int cr)
{
if(l==r){dfs(1,0,0,l,cr);return;}
int mid=l+r>>1;
ls=++tot;build(l,mid,ls);
rs=++tot;build(mid+1,r,rs);
sm[cr]=sm[ls]+sm[rs];
}
void updt(int l,int r,int cr,int p)
{
if(l==r){dfs(1,0,0,l,cr);return;}
int mid=l+r>>1;
if(p<=mid)updt(l,mid,ls,p);
else updt(mid+1,r,rs,p);
sm[cr]=sm[ls]+sm[rs];
}
Node query(int l,int r,int cr,int L,int R)
{
if(l>=L&&r<=R)return sm[cr];
int mid=l+r>>1;
if(L>mid)return query(mid+1,r,rs,L,R);
if(R<=mid)return query(l,mid,ls,L,R);
return query(l,mid,ls,L,R)+query(mid+1,r,rs,L,R);
}
int main()
{
n=rdn();k=rdn();lm=(1<<k);
bin[1]=1;for(int i=2;i<=k;i++)bin[i]=bin[i-1]<<1;
for(int i=1;i<=n;i++)
for(int j=1;j<=k;j++)a[i][j]=rdn();
tot=1;build(1,n,1);
Q=rdn();
for(int i=1,op,id,l,r;i<=Q;i++)
{
op=rdn();
if(op==1)
{
id=rdn();
for(int j=1;j<=k;j++)a[id][j]=rdn();
updt(1,n,1,id);
}
else
{
l=rdn();r=rdn();
Node d=query(1,n,1,l,r);int ans=-INF;
for(int i=0;i<lm;i++)
ans=Mx(ans,d.mx[i]-d.mn[i]);
printf("%d\n",ans);
}
}
return 0;
}
CF 1093G Multidimensional Queries——线段树(消去绝对值符号)的更多相关文章
- HDU 4027 Can you answer these queries? (线段树区间修改查询)
描述 A lot of battleships of evil are arranged in a line before the battle. Our commander decides to u ...
- CF 1023D Array Restoration - 线段树
题解 非常容易想到的线段树, 还可以用并查集来. 还有一位大神用了$O(n)$ 就过了Orz 要判断是否能染色出输入给出的序列,必须满足两个条件: 1. 序列中必须存在一个$q$ 2. 两个相同的数$ ...
- hdu 4027 Can you answer these queries? 线段树区间开根号,区间求和
Can you answer these queries? Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/sho ...
- CF 787D Legacy(线段树思想构图+最短路)
D. Legacy time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- Light OJ-1082 - Array Queries,线段树区间查询最大值,哈哈,水过~~
...
- HDU4027 Can you answer these queries? —— 线段树 区间修改
题目链接:https://vjudge.net/problem/HDU-4027 A lot of battleships of evil are arranged in a line before ...
- HDU-4027-Can you answer these queries?线段树+区间根号+剪枝
传送门Can you answer these queries? 题意:线段树,只是区间修改变成 把每个点的值开根号: 思路:对[X,Y]的值开根号,由于最大为 263.可以观察到最多开根号7次即为1 ...
- Codeforces Round #590 (Div. 3) D. Distinct Characters Queries(线段树, 位运算)
链接: https://codeforces.com/contest/1234/problem/D 题意: You are given a string s consisting of lowerca ...
- HDU 4027 Can you answer these queries?(线段树,区间更新,区间查询)
题目 线段树 简单题意: 区间(单点?)更新,区间求和 更新是区间内的数开根号并向下取整 这道题不用延迟操作 //注意: //1:查询时的区间端点可能前面的比后面的大: //2:优化:因为每次更新都 ...
随机推荐
- 1-19-1 RHEL6启动原理和故障排除
大纲: 一.RHEL6系统启动原理 BIOS--->mbr--->bootloader--->内核--->init--->/etc/rc.d/rc.sysinit---& ...
- Inventory Update
依照一个存着新进货物的二维数组,更新存着现有库存(在 arr1 中)的二维数组. 如果货物已存在则更新数量 . 如果没有对应货物则把其加入到数组中,更新最新的数量. 返回当前的库存数组,且按货物名称的 ...
- 虚拟机VirtualBox及轻量级的CentOS
1,先下载虚拟机VirtualBox和centos(下边有链接),将VirtualBox安装在本机 2,管理 --> 导入虚拟电脑 --> 选择本地centos文件 3,点击下一步 - ...
- caffe:自己搭建网络来训练
1.准备样本 要训练自己的样本,首先需要把样本准备好,需要准备的是训练集和测试集,caffe支持直接使用图片,当然把样本转换为leveldb或lmdb格式的话训练起来会更快一点.这里我先偷个懒,直接使 ...
- hdu3549
题解: 网络流模板题 多组数据 代码: #include<cstdio> #include<cstring> #include<algorithm> #includ ...
- LeetCode OJ:Power of Two(2的幂)
Given an integer, write a function to determine if it is a power of two. 看一个数是不是2的幂,代码如下: class Solu ...
- SpringXML方式配置bean的生存范围Scope
在一个bean的配置里面可以指定一个属性Scope,也就是bean的范围,bean的生命周期. Scope可取的值5种:singleton(默认).prototype.request.session. ...
- mifi随身wifi选购
一款优秀的随身wifi不光要信号好,更要电量足 ,网速快.影响这个三个问题的主要因素就是cpu.so咱们从cpu的角度来分析下mifi 机器型号(cpu型号) TP 961 52000 (MDM962 ...
- python_安装第三方库
1.有一个专门可下载安装第三方库的网址: http://www.lfd.uci.edu/~gohlke/pythonlibs/ Ctrl+f 搜索要下载的第三方库,并下载 2.库文件都是以 whl ...
- ubuntu16 jdk7 install&config
1,下载jdk文件 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521 ...