CF1093G Multidimensional Queries [线段树]

传送门

类似套路, 将绝对值拆开

我们设置一个状态S, 如果第i为是1, 就加上a[i], 否则为-a[i]

那么一个合法的组合就是 val[S] + val[31-S], 于是在线段树中选两个最大的点加起来更新答案就可以了

#include<bits/stdc++.h>
#define N 200050
using namespace std;
const int inf = 0x3fffffff;
int read(){ int x; scanf("%d", &x); return x;}
struct Node{ int Max[32];} t[N<<2];
int n, k, m, a[N][5];
Node Init(int *A){ Node ans;
	for(int S=0; S<(1<<k); S++){ int sum = 0;
		for(int j=0; j<k; j++){ if(S & (1<<j)) sum += A[j]; else sum -= A[j];} 
		ans.Max[S] = sum;
	} return ans;
}
void Pushup(int x){
	for(int i=0; i<(1<<k); i++){
		t[x].Max[i] = max(t[x<<1].Max[i], t[x<<1|1].Max[i]);
	}
}
void Build(int x, int l, int r){
	for(int i=0; i<(1<<k); i++) t[x].Max[i] = -inf;
	if(l == r){ t[x] = Init(a[l]); return;}
	int mid = (l+r) >> 1;
	Build(x<<1, l, mid); Build(x<<1|1, mid+1, r);
	Pushup(x);
}
void Modify(int x, int l, int r, int pos){
	if(l == r){ t[x] = Init(a[l]); return;}
	int mid = (l+r) >> 1;
	if(pos <= mid) Modify(x<<1, l, mid, pos);
	else Modify(x<<1|1, mid+1, r, pos);
	Pushup(x);
}
int Quary(int S, int x, int l, int r, int L, int R){
	if(L<=l && r<=R) return t[x].Max[S]; 
	int mid = (l+r) >> 1, ans = -inf;
	if(L<=mid) ans = max(ans, Quary(S, x<<1, l, mid, L, R));
	if(R>mid) ans = max(ans, Quary(S, x<<1|1, mid+1, r, L, R));
	return ans;
}
int main(){
	n = read(); k = read();
	for(int i=1; i<=n; i++){
		for(int j=0; j<k; j++) a[i][j] = read(); 
	} Build(1, 1, n);
	m = read();
	while(m--){
		int op = read();
		if(op == 1){
			int pos = read();
			for(int i=0; i<k; i++) a[pos][i] = read();
			Modify(1, 1, n, pos);
		}
		if(op == 2){
			int l = read(), r = read(), ans = 0; 
			for(int S = 0; S < (1<<k); S++){
				ans = max(ans, Quary(S, 1, 1, n, l, r) + Quary((1<<k) - S - 1, 1, 1, n, l, r));
			} printf("%d\n", ans);
		}
	} return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 多维缩放(Multidimensional Scaling)是一种数据分析方法,用于将高维数据转换为低维空间中的点,以便更好地理解和可视化数据之间的相似性和差异性。它可以用于各种领域,如心理学、社会学、市场研究和生物学等。多维缩放可以通过计算数据点之间的距离或相似性矩阵来实现。 ### 回答2: 多维缩放法(multidimensional scaling,MDS),是一种常用的数据分析技术,用于在低维空间中表示高维度数据,通常用于探索几何学特征和比较数据之间的相似性。该技术可将复杂的关系和结构可视化为二维或三维图形,从而使我们更容易理解和解释数据。 多维缩放法主要用于探究数据集内不同组或对象之间的相似性和差异性,基于它们之间的距离或相似性结果。可分为两种类型:度量MDS和非度量MDS。度量MDS假定距离是可度量的,且高维数据的距离可以在低维空间中重现。非度量MDS假定距离是无序的,且无法准确地反映高维数据之间的距离。 要使用多维缩放法,首先需要获得有关对象之间距离或相似性的数据。比如当人们在做一个品牌调查时,想要了解不同品牌之间的相似性和差异性,就需要先收集关于消费者对每个品牌的与众不同程度的概率数据,然后利用多维缩放法,将数据转换为映射低维空间中的点,可以发现在低维空间中,与众不同程度较高的品牌往往会聚集在一起,这样的模型更易于理解和分析。 多维缩放法还有其他重要应用案例。在生物学领域,它可以用于研究生物物种之间的相似性和演化类别的结构。在心理学领域,它可以用于研究人们对不同对象或概念之间的感知和判别,以及评估人类语言语调的范围和结构。 总之,多维缩放法是一种简单而强大的分析工具,可以帮助探索和理解不同数据之间的相似性和差异性,找出数据点之间的潜在关系和结构,为后续研究和应用提供宝贵的指导。 ### 回答3: 多维缩放(又称为MDS)是一种统计学方法,用于评估数据集中各项之间的距离或相似度。MDS可以将数据集中的对象(如文本文档、图像或音频片段)映射到二维或三维空间,从而创建一个可视化表示。MDS的目的是通过将数据点映射到较低维度空间中的布局来展示数据集中对象的相似性和差异性,以便进一步分析。 最常见的MDS方法是基于距离矩阵的。在这种方法中,每对对象之间的距离被计算并表示为一个矩阵。MDS将该距离矩阵转换为低维度空间中的点,并通过最小化在低维度空间中的点之间的距离与原始距离矩阵之间的差异来找到合适的布局。 MDS在许多领域都得到了广泛的应用。在市场研究中,MDS可用于分析消费者对产品的偏好,而在物理空间中,MDS可用于研究分子之间的相似性。此外,MDS还被广泛用于可视化大型数据集中的关系和模式,包括社交网络分析、文本分析和数据挖掘。通过可视化数据集中的对象之间的相似性和差异性,MDS使得分析人员能够更好地理解复杂的数据结构和关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值