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:优化:因为每次更新都 ...
随机推荐
- 明明白白AOP
引子: AOP(面向方面编程:Aspect Oriented Programing)和IoC一样是Spring容器的内核,声明式事务的功能在此基础上开花结果.但是AOP和OOP差别较大,要很好地理解这 ...
- 【css】CSS3 Media Queries 详解【转】
说起CSS3的新特性,就不得不提到 Media Queries .最近 Max Design 更新的一个泛读列表里,赫然就有关于 Media Queries 的文章.同时位列其中的也有前天我刚刚翻译的 ...
- VS2005 使用体验
鄙人记性真心不好,看了就忘.此文记录下日常小工具的tips. 1)VS的小番茄: 破解版 Visual.Assist.X.V10.6.1833支持VS2010 VS2008 VS2005 VC6 破解 ...
- 12.18 aop身份验证
对所有卖家页面进行身份验证,采用aop编程 步骤:1.获得request 2.查询cookie 3.查询redis 4.查询不通过时,采用抛出异常,捕捉异常,再异常里加入跳转到登陆页面的方法 准备工作 ...
- iOS开发:MKMapView地图内存持续增加的释放解决办法
内存持续增加的释放解决办法 最近修改一个用到MKMapView的项目,内存一直占用过多,每次拖拽地图时还会增加占用,且一直无法释放. 经过两天的排查,最后锁定是创建的self.map对象在加载地图的时 ...
- mifi随身wifi选购
一款优秀的随身wifi不光要信号好,更要电量足 ,网速快.影响这个三个问题的主要因素就是cpu.so咱们从cpu的角度来分析下mifi 机器型号(cpu型号) TP 961 52000 (MDM962 ...
- week13《java程序设计》第13次作业总结
week13<java程序设计>第13次作业总结 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 答: 1.IP与端口:ip和域名相对应,可找 ...
- c++下使用邮槽实现进程间通信
Windows API提供了邮槽和命名管道两种机制来实现进程间通信,在这里使用C++实现邮槽. 邮槽是Windows提供的一种进程间单向通信的机制,进程中的一方只能读取(或写入)数据,而另一方只能写入 ...
- flowable FormEngine和FormEngineConfiguration
FormEngineConfiguration 继承自 AbstractEngineConfiguration. 一.获得实例 FormEngineConfiguration提供了7个公开的静态方法: ...
- Kotlin Reference (四) Basic Types
most from reference 基本类型 在kotlin中,一切都是对象,我们可以在任何变量上调用成员函数和属性.一些类型可以具有特殊的内部表示:例如,数字.字符和布尔值都可以在运行时被表示为 ...