浅谈根号分治——暴力的美学

这篇具有很好参考价值的文章主要介绍了浅谈根号分治——暴力的美学。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

根号分治的概念

根号分治是一种优化暴力算法。
我个人的理解就是这东西跟分块差不多。但应用面比分块更广。
其核心思想就是 n n n个数组成的数列,把它分成大于 N \sqrt N N 和小于 N \sqrt N N 的部分处理。

如果我们能对数据范围进行分块处理,或者两个暴力分别算之后拼接在一起,就用两个合在一起的暴力,实现了正解。

【模板】P3396 哈希冲突

一句话题意:
长度为 n n n 的序列和 m m m 个操作,每次操作有两种类型:

  1. 询问下标 m o d    x mod~~x mod  x 后为 y y y 的所有数之和;

  2. 修改第 x x x 个数;

分析:
这个题的暴力很好打。不再赘述。

	cin >> n >> m;
	int ans =0;
	for(int i = 1 ; i <= n ; i++) cin >> a[i];
	for(int i = 1 ; i <= m ; i++){
   
		cin >> cmd >> x >> y;
		if(cmd == 'A'){
   
			for(int j = y ; j <= n ; j += x) ans += a[j];
			cout << ans << endl;
			ans = 0;
		}else a[x] = y;
	}

这个暴力是 O ( N M ) O(NM) O(NM)的,也就是能通过1e4的数据。
我们再想想怎么优化这个暴力?

如果 N ≥ N N\ge \sqrt N NN 文章来源地址https://www.toymoban.com/news/detail-670091.html

到了这里,关于浅谈根号分治——暴力的美学的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浅谈图论——迪杰斯特拉算法(leetcode例题,C++演示)

    如果你想问这个世界上什么算法是最牛逼的?博主是回答不上来的。但是,如果你问博主 什么数据结构是最牛逼 ?博主个人认为 图是最牛逼的数据结构 。因为很多的问题,都可以用图这种数据结构来表示。链表、树这种数据结构博主认为可以看成一种 特殊的图 。所以,博

    2024年02月20日
    浏览(74)
  • 【LeetCode: 53. 最大子数组和 | 暴力递归=>记忆化搜索=>动态规划 | 分治法 】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2023年04月21日
    浏览(58)
  • 图论——浅谈理论,DFS序和欧拉序

    提示:本文在树论基础上。 DFS 序:1 2 4 5 7 9 8 3 6. 欧拉序:1 2 4 4 5 7 9 9 7 8 8 5 2 3 6 6 3 1. 回加欧拉序 :1 2 4 2 5 7 9 7 5 8 5 2 1 2 3 6 3 1. 下文举例均指此图。 周所周知,DFS 为深度优先遍历,其框架如: 而 DFS 序就表示,DFS 遍历节点的顺序。 比如第 3 个遍历到的节点为 Q,则 DFS 序

    2024年01月19日
    浏览(31)
  • 【华为OD机试真题】1154 - 对称美学(JAVA C++ Python JS) | 机试题+算法思路+考点+代码分析

    🍂个人博客首页: KJ.JK   🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用Python语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习 🎃题目描述

    2024年02月04日
    浏览(31)
  • 算法-分治算法

    文章来源: https://blog.csdn.net/weixin_45630258/article/details/126425400 欢迎各位大佬指点、三连 1、定义:分治,也就是分而治之。 它的一般步骤是: ① 将原问题分解成若干个规模较小的子问题(子问题和原问题的结构一样,只是规模不一样) ② 子问题又不断分解成规模更小的子问

    2024年02月09日
    浏览(28)
  • 算法基础15 —— 分治算法(归并排序 + 快速排序)

    分治法的基本概念、思想 分治法是一种很重要的算法。 字面解释,分治分治,分而治之。就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 不难发现,分

    2024年02月03日
    浏览(38)
  • 【算法系列篇】分治-归并

    上一篇算法文章,我们介绍了分治-快排的算法,今天我将为大家分享关于分治的另外一种算法——归并。 归并算法是一种常用的排序算法,它采用分治策略将待排序的数组分解为更小的子数组,然后逐步合并这些子数组以获得最终的有序数组。归并排序的主要思想是将两个

    2024年02月09日
    浏览(38)
  • 【算法】分治-快排

    个人主页 : zxctscl 如有转载请先通知 分治就是分而治之 就是把数组中的元素分为三块,0全部在左边,1全部在中间,2全部在右边。 这里要用到三个指针,一个i指针用来遍历,一个left用来存放0区域的最后侧,一个用来存放2区域的最左侧。 那么区间就分成了4个 只需要判断

    2024年04月25日
    浏览(22)
  • 分治法(算法)

    分治法是算法常用的解题方法之一,是将一个大的问题拆分为若干小的问题。二分法就是常用的分治法。 1.二分查找 2.合并排序(归并排序) 3.快速排序 4.快速幂 5.汉诺塔 二分查找对要查找的序列有两个要求: ​ 一是该序列必须是有序的(即该序列中的所有元素都是按照大

    2024年02月02日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包