ICode9

精准搜索请尝试: 精确搜索
  • 分治与根号算法2021-10-04 01:33:34

    1. 根号分治与分块 1.1. 根号分治 根号分治,就是在预处理与询问的复杂度之间寻找平衡的一个算法。通常以根号作为问题规模的分界线,规模小于根号的询问可以 \(n\sqrt n\) 预处理求出,而回答一次规模为 \(B\geq n\) 的询问的时间只需要 \(\dfrac n B\leq \sqrt n\),那么整个题目就可以

  • 算法第二章实践报告2021-10-03 21:00:58

    1.实践题目     maximum number in a unimodal array(单峰数组中的最大数目) 2.问题描述      求解单峰数组中的最大数目      给定的 n 个不同元素的单峰数组,在由n个(1<= n <= 10000)不同元素组成的数组中找到最大数,该数组特点为从小单调递增直到出现最大值,然后再逐渐递减,

  • 算法第二章上机实践报告2021-10-03 10:00:19

    算法第二章上机实践报告 一、实践题目名称 二分法求函数的零点 二、问题描述 有函数:f(x)=x5−15x4+85x3−225x2+274x−121 已知f(1.5)>0,f(2.4)<0 且方程f(x)=0 在区间[1.5,2.4] 有且只有一个根,请用二分法求出该根。 提示:判断函数是否为0,使用表达式 fabs(f(x)) < 1e-7 求出给定函

  • 递归与分治——全排列问题2021-10-01 21:34:41

    递归函数:以层次来想函数递归,以深度来想递归出口。 问题: 给出一个集合,输入这个集合所有的排列集合。 例如: 输入: {1,2,3} 输出: {1,2,3} {1,3,2} {2,1,3} {2,3,1} {3,1,2} {3,2,1} 思路: 全排列,就是不断交换两个元素,打印。 将所有可以交换的两个元素都交换一遍,都打印一遍,加上本来的排列,打印出来

  • CF1385D a-Good String(分治)2021-09-30 22:33:50

    一种分治的思想,看每次的左右区间,找一个需要更改小的进行更改,然后对另一个区间进行继续往下分治的更改。 #include<cstdio> #include<iostream> using namespace std; int T,n; char s[200005]; int solve(int l,int r,char c){ if(l==r){ if(s[l]==c) return 0; return 1; }

  • 线段树分治 ---- CF1217F - Forced Online Queries Problem(假离线 可撤销并查集 + 线段树分治)详解2021-09-29 21:00:02

    题目链接 题目大意 解题思路: 我一开始想到可以用可撤销并查集去维护这种删边加边的操作,但是有个缺点是每次撤销都有把后面的边全部撤销复度是 O ( n

  • 算法第2章实践报告2021-09-26 20:34:25

    算法第2章实践报告 1.实践题目名称 7-1 maximum number in a unimodal array   2.问题描述 该题就是要在一个数值先单调递增然后再单调递减的整数数组里找到最大值并输出,且要求时间复杂度在O(log n)。   3.算法描述 因为该数组存在一个峰值,而题目要求找到的也是这个峰值,并且为了减

  • 根号分治 学习笔记2021-09-23 17:05:27

    分块真是博大精深呢。。。 一些难以合并的问题可以通过分块去解决。因为它实在是太暴力了。 还有一种思想叫做定期重构。每进行\(\sqrt N\)次操作之后就以\(O(n)\)的代价去重构整个序列。于是在询问的时候,我们最多处理\(\sqrt N\)个操作。 另外,还有一种分类讨论的思想。把某

  • 最大子列问题与分治算法2021-09-22 21:59:32

            今天做到了一个最大子列的问题,题目如下: 7-4 最大子列和问题 给定K个整数组成的序列{ N1​, N2​, ..., NK​ },“连续子列”被定义为{ Ni​, Ni+1​, ..., Nj​ },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -

  • 算法基础三:分治算法---快速排序算法2021-09-22 20:37:12

    算法基础三:分治算法---快速排序算法 一、算法描述与分析 ​ 快速排序是一个典型的分治算法:和归并排序一样将A[p...r]划分成两部分,A[p...q]和A[q+1...r],但不是对分(q=[(p+r)/2]),而是利用算法基础二:渐增型算法---序列的划分中的PARTITION过程,使得A[p...q]中的元素值小于A[q+1...r]中

  • 《 算法分析与设计》 实验一-分治算法2021-09-21 17:03:37

     - 众数问题 Description 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的由n 个自然数组成的多重集S,计算S的众数及其重数。如果出现多个众数,请输出最小的那个。

  • 猫树分治小记2021-09-12 21:02:11

    一个非常 trivial 也不太常见的算法,不过学过了就不要忘了哦( 猫树问题可以适用于离线解决以下类型的数据结构问题: 与序列有关,且询问是一段区间 序列静态,即,不涉及修改操作 当然离不离线都可以,由于其过程类似于点分治,所以在线的情况可通过类似于建出建出点分治的情况动态维护。 首

  • CF914E Palindromes in a Tree2021-09-12 16:34:36

    CF914E Palindromes in a Tree 题目传送门。 题意简述:给一棵树,节点上有字符。对于每个点,求有多少条经过该点的路径满足该路径上出现奇数次的字符最多有 \(1\) 个。 \(n\leq 2\times 10^5\),字符集大小为 \(20\)。 摘自 简单树论 点分治部分例题 VII。 话说这个标题有点误导人,一开

  • 分治算法——快速排序 原理与C++代码实现(简短)2021-09-12 11:00:02

          如何分解是一个难题,因为如果基准元素选取不当,有可能分解 成规模为0和n−1的两个子序列。 例如,序列(30, 24, 5, 58, 18, 36, 12, 42, 39),第一次选取5作为 基准元素,第二次选取12作为基准元素…… 基准元素选取有以下几种方法: 取第一个元素。 取最后一个元素。 取中间位置

  • 【瞎口胡】CDQ 分治2021-09-11 19:32:47

    本篇内容将持续更新。 CDQ 分治是一种离线的分治算法。其主要思想是,对于一个规模为 \(n\) 的问题,首先计算 \([1,\left \lfloor \dfrac n2 \right \rfloor],[\left \lfloor \dfrac n2 \right \rfloor+1,n]\) 这两个子问题内部的答案,再计算这两个子问题相互贡献的答案。 一个比较经

  • 【瞎口胡】线段树分治2021-09-11 19:32:28

    线段树分治是一种优秀的时间轴分治算法。 例题 1 Luogu P5787 二分图 题意 有一张 \(n\) 个点 \(m\) 条边的无向图,第 \(i\) 条边在 \(x\) 时刻出现 \(y\) 时刻消失,询问时间段 \(1 \sim k\) 这张图是不是二分图。 时间段 \(x\) 的定义是时刻 \(x-1\) 到 \(x\) 这一段时间。 \(1 \le

  • A. Accelerator (分治+FFT)2021-09-11 12:01:49

    题目 https://codeforces.com/gym/103119/problem/A 分析 https://fanfansann.blog.csdn.net/article/details/118528285 这篇博客讲得好清楚了。 代码 #include <bits/stdc++.h> using namespace std; #define MAXN 100005 #define Ha 998244353 #define GHa 3 long long

  • 算法设计与分析----分治法2021-09-10 21:01:50

    算法设计与分析----分治法(C++) 一、分治法 1、定义 ​ 对于一个规模为n的问题:若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。 ​ 这种算

  • LeetCode200题---8 最长公共前缀2021-09-03 17:02:10

    14、最长公共前缀 一、思路1、横向扫描2、纵向扫描3、分治 一、思路 1、横向扫描 数学描述: 首先从两个数出发,两个数的LCP和第三个数运算,以此类推,直到遍历完所有的字符。 横向扫描另一种思路是纵向扫描。 2、纵向扫描 纵向扫描就是每次比较所以字符串的每一列(也就是每个

  • [学习笔记] 浅析cdq分治2021-08-29 13:34:26

    正如其名, cdq分治是一种分治算法, 通常用于解决受限制的离线贡献问题 这个算法通过分治, 不断地将要处理的区间分成左区间和右区间, 然后统计这两个区间之间的互相贡献 在这个过程中, 我们需要保证这两个区间的东西确实是能互相产生贡献的两类东西 如何做到呢? 许多时候在cdq前排

  • 【luogu P5787】graph / 二分图 /【模板】线段树分治(扩展域并查集)(线段树分治)2021-08-24 09:32:35

    graph / 二分图 /【模板】线段树分治 题目链接:luogu P5787 题目大意 有 n 个点,然后会加边删边,然后每次操作后问你这个图是否是二分图。 思路 首先加边删边,那边就会有存在的时间,所以你可以用一个线段树分治来搞。 那接着判断是否是二分图,可以用一个扩展域并查集来搞。 具体就是每个

  • 点分治 学习笔记2021-08-24 09:02:19

    目录板子题算法解析代码 板子题 题目传送门 给定一棵 \(n\) 个节点的树,每条边有边权,求出树上两点距离小于等于 \(k\) 的点对数量。 \(n\le 4\times 10^4\) 算法解析 显然我们发现如果计算从每个节点开始的点对数量是 \(O(n^2)\) 的,显然是不行的,但是我们发现这是一个计数题,所以我们

  • 分治、动态规划、贪心、回溯算法特点的自我总结2021-08-20 12:32:13

    分治特点 分解: 使用递归的方式将问题的范围逐渐缩小看作子问题 比如 一分为二:0~n/2,n/2+1~结尾 首尾相互靠近 求解:通常被看作最小子问题的求解(注意边界判断) 合并:子问题的返回值处理 动态规划特点 最优子结构 一个问题的最优解包含了其子问题的最优解:第n层子问题需要根据第n-1

  • 斜率优化与决策单调性2021-08-16 14:31:40

    斜率优化本质:维护凸包 基本上都是得到一个答案斜率式,然后后面的不会比前面的更优,找到这样的斜率临界点(二分),维护上/下凸包。 经常使用单调队列维护是因为斜率单调不降,单调栈是因为斜率单调不增。 $x$ 坐标假如不单调递增的话就不能用线性数据结构维护,可以使用李超树/ $cdq$ 分治。

  • C - 1, 2, 3 - Decomposition 题解(思维+分治)2021-08-12 10:00:06

    题目链接 题目思路 这个题目好玄学感觉是分治+爆搜的题目 建议直接看官方题解 分治秒的一批 代码 #include<bits/stdc++.h> #define fi first #define se second #define debug cout<<"I AM HERE"<<endl; using namespace std; typedef long long ll; const int maxn=2e5+5,inf=0x

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有