首页 > 其他分享 >根号分治简单笔记 | P3396 哈希冲突

根号分治简单笔记 | P3396 哈希冲突

时间:2022-10-23 20:56:18浏览次数:45  
标签:P3396 int 分治 哈希 序列 根号 暴力

简要题意

你需要维护一个长度为 \(n\) 的序列 \(v\),支持:

  • A x y 求整个序列中,所有模 \(x\) 为 \(y\) 的下标的元素的值,即:

\[\sum_{i=0}^{\lfloor(n-y)\div x\rfloor}v_{ix+y} \]

  • C x y,将 \(v_x\) 修改为 \(y\)。

思路

根号分治是一种玄学的暴力优化,如果一道题的暴力有很多种写法,且每一种写法有自己独特的优势(如大值较快,小值较快等),则可以考虑根号分治。

比如说这道题,有两种方法:

  • 直接暴力找序列中模 \(x\) 为 \(y\) 的所有下标,并把它们加起来。这样子大的 \(x\) 跑得快,小的值跑得慢。
  • 预处理,小 \(x\) 较快,大的 TLE/MLE。

我们可以议定一个界 \(R\),使得 \(x>R\) 的选择暴力,小于等于 \(R\) 的预处理。这里,\(R=\sqrt{n}\) 时较优。

总结:根号分治就是选择暴力方法,扬长避短,用暴力乱踩正解!

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;

int n,m;
int a[1500005],f[500][500];
int bl;

signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	bl=sqrt(n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=bl;j++){
			f[j][i%j]+=a[i];
		}
	}
	while(m--){
		char op;int x,y;
		cin>>op>>x>>y;
		if(op=='A'){
			if(x<=bl){
				cout<<f[x][y]<<'\n';
			}
			else{
				int ans=0;
				for(int i=y;i<=n;i+=x){
					ans+=a[i];
				}
				cout<<ans<<'\n';
			}
		}
		else{
			for(int i=1;i<=bl;i++){
				f[i][x%i]+=(y-a[x]);
			}
			a[x]=y;
		}
	}
	return 0;
}

标签:P3396,int,分治,哈希,序列,根号,暴力
From: https://www.cnblogs.com/zheyuanxie/p/p3396.html

相关文章

  • 树哈希
    乱搞。#include<bits/stdc++.h>usingnamespacestd;constintMAXN=1000006;const__uint128_tP=0xffffffff00000001;intn;const__uint128_tB=19260817;......
  • MD5 哈希加密算法 - C++ 实现
    MD5加密算法-C++实现写在前头:还在学习中!整个文档写的很匆忙,肯定还有很多不周到的地方.欢迎在评论中提出你的宝贵意见!!算法背景BackgroundMD5消息摘要算法......
  • 三角形ABC中,AB=AC,AD=2,BD*CD=2倍根号3,求AC长度?
    2022年10月23日11点09分END......
  • 【leetcode_C++_哈希表_day5】242. 有效的字母异位词&&349. 两个数组的交集&&202.快乐
    C++知识补充:(不完全,仅针对本题用的知识点)1.C++类&对象关键字public确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成......
  • 数据结构与算法系列二之链表、哈希表及栈
    第四章链表21、删除倒数第k个节点题目:如果给定一个链表,请问如何删除链表中的倒数第k个节点?假设链表中节点的总数为n,那么1≤k≤n。要求只能遍历链表一次。例如,输入下图1......
  • 补题记录——Oct. Training 1-图论、集合哈希
    H-BoboniuWalksonGraphhttps://codeforces.com/problemset/problem/1394/B题意给n个点m条有向边,么个点的出度不超过k(k<=9),每条边都有一个边权在(\(1<=w<=m\))且每条边......
  • Snowy Mountain (找规律来贪心+ 多源特殊bfs+根号n)
    题目大意:给定一棵 nn 个点的树,其中每个点可能是黑色或白色。一个点的高度定义为其距离最近黑色节点的距离。你初始在 ii 号节点上,势能为 00,可以做以下两种操作:......
  • 根号算法学习记录
    根号算法专题分块基础根号平衡对于两个不同方面的复杂度,直接做的话一个很小,一个很大,我们用根号使得两者复杂度同阶级以降低总复杂度。这个叫根号平衡。一个典型的应用......
  • 可哈希与不可哈希?
    python中可哈希的数据类型,即不可变的数据结构(数值类型(int,float,bool)字符串str、元组tuple、自定义类的对象)。不可哈希的数据类型,即可变的数据结构 (字典dict,列表list,集......
  • 树哈希& 最小表示法
    1.把深度和子树大小全部考虑到的树哈希,LLhashx(intx,intfa,intdep){if(sz[x]==1)return1;vector<LL>vs;LLans=h[dep]%mod;for(int......