ICode9

精准搜索请尝试: 精确搜索
  • 1. 算法基础整合2022-07-14 23:33:38

    1. 基础算法 1.1 排序 1.1.1 快速排序 模板:Acwing785 快速排序 题目:将一个长度为 \(n\) 的数组 \(q\) 从小到大排序。 思路: 选取界点 \(x\),一般为 \(q_{(l+r)/2}\)(\(l,r\) 为排序的左端点和右端点) 或随机选点(效率较高)。 将 \(\le x\) 的数换到左边,将 \(\ge x\) 的数换到右边(主

  • BUPT 2022 Summer Training #2(2018-2019 ACM-ICPC, Asia Seoul Regional Contest)2022-07-14 23:03:29

    E-LED 题目大意:已知N个点(vi,li),求一个分段函数使得这些点在这个函数上的误差的最大值最小。 数据范围:1≤N≤300000,0≤vi,li≤1e9; 解题思路:二分贪心。 二分答案后尽量将排序后的数据归到L1,接着再放到L2,不能放了就是答案无效。 这题的坑在于v=0这个点L0一定为0,还有L1≤L2,所以对于

  • CF1093G Multidimensional Queries2022-07-14 22:33:39

    \(\text{Code}\) 分析在 2022暑假集训 #include <cstdio> #include <iostream> #define IN inline using namespace std; const int N = 2e5 + 5, INF = 0x3f3f3f3f; int n, d, a[N][5]; IN void read(int &x) { x = 0; char ch = getchar(); int f = 1; for(

  • Loj#510-「LibreOJ NOI Round #1」北校门外的回忆【线段树】2022-07-14 12:04:07

    正题 题目链接:https://loj.ac/p/510 题目大意 给出一个代码 function add(x,v) while x <= n do s[x] = s[x] xor v x = x + lowbit(x) //注意,这里是 lowbit,这也是两份代码唯一的区别 end while end function function query(x) ans = 0 while

  • 归并排序2022-07-14 11:34:18

    归并排序 归并排序(Merge sort) 是建立在归并操作上的一种有效的排列算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); 自

  • Lintcode 二分查找2022-07-14 07:31:08

    14 · 二分查找 算法 简单 通过率39%   题目 题解 笔记 讨论 排名 描述 给定一个排序的整数数组(升序)和一个要查找的整数 target,用O(logn)O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。 样例 样例

  • 如何理解分治一定能分到所有区间2022-07-13 23:36:26

    考虑当前层,是不是只分到左端点在 \([l,mid]\),右端点在 \([mid+1,r]\) 的区间? 那么是不是还差左右端点都在 \([l,mid]\) 的区间,左右端点都在 \([mid+1,r]\) 的区间?于是推锅分治下去即可,因为 \(solve(l,r)\) 的定义就是遍历了左右端点在 \([l,r]\) 的区间。

  • CF1172F Nauuo and Bug 题解2022-07-13 22:34:32

    首先将问题转化为执行 sum(A,l,r,p) 后减去了多少次 \(p\)。 注意到若 \(x>y\),则 \(result\) 的初值为 \(x\) 时执行 sum(A,l,r,p) 中减去 \(p\) 的次数不少于 \(result\) 的初值为 \(y\) 时执行 sum(A,l,r,p) 中减去 \(p\) 的次数,故考虑建线段树并对区间 \([l,r]\) 维护 \(c_x\)

  • @4 UOJ3882022-07-13 22:03:02

    鸽子固定器 题目描述 点此看题 解法 考虑这样一种暴力的想法:我们把物品按照 \(s\) 排序,枚举 \(\max s\),然后扫描 \(\min s\),过程中维护前 \(m\) 大的 \(v\) 考虑优化这个暴力,对于选取个数 \(<m\) 的情况,一定选取了一段连续的区间,暴力枚举所有这样的区间即可,那么我们只需要考虑选取

  • [SDOI2013] 森林(主席树+启发式合并)2022-07-13 12:03:34

    传送门 description 给一个森林,每个点有权值。在线(每次每个变量xor lastans) 操作如下: Q x y k:查询x到y的路径上第k小的权值(保证x到y至少k个点) L x y:将x和y连边。 solution 从Q和L分别可以猜测需要用到主席树和lct。 主席树是我一直不太熟的数据结构,作用可以维护一段历史版

  • SP1557 GSS2 - Can you answer these queries II2022-07-13 08:33:22

    题意 求区间最大去重后的子段和。 Solution 考虑到 CF997E 的套路。求区间子段计数的问题,可以采用离线的方式。还是一样考虑移动右端点。那么在线段树上 \(i\) 位置存储 \([i,r]\) 的去重后的子段和。 现在考虑端点移动。加入了一个 \(a_r\),只会对上一次出现 \(a_r\) 的位置之后的

  • SUSTOJ.排了又没有完全排2022-07-12 19:05:08

    题目详情 - 排了又没有完全排 - SUSTOJ 2022-07-12 思路: 二分猜数字,常规二分,返回左端点的模板 check比较难写 用双指针,左右夹数,把矩阵画出来比较好理解。   1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 typedef long

  • [学习笔记]李超线段树2022-07-12 18:31:20

    这个之前学过的,结果我发现我忘了,怕之后再忘,我就再写一下吧。毕竟这个东西非常有用(好写)可以代替cdq/平衡树+斜率优化,来优化dp 流程 数据结构本质是一棵线段树,每个节点都储存了\(bst[]\)。 \(bst[l,r]\)表示覆盖该点范围的在\(mid\)处取最值的线段。 你会想:维护这个有什么用?每个

  • [纪中][线段树]矮人排队2022-07-12 14:34:53

    题目大意 给定一个数列。 有两个操作 一,调换队列中下标为 \(x\) 和 \(y\) 的元素的位置; 二,询问一个数列\(D\)的 \(a, a+1, a+2......b\) 的一种排列方式为该队列的子队列。 解析 一,显然,取这个数列的每个元素所对应的下标的最大值 \(maxt\) 和 最小值 \(mint\)。 当 \(maxt - mint

  • $\text{Sol. Luogu P1642}$ 规划2022-07-12 08:34:42

    \(\text{Sol. Luogu P1642}\) 规划 题意:给一颗 \(n\) 个节点的树,每个节点都有权值 \(a_i,b_i\),要求在树上选出 \(n-m\) 个连通的节点,最大化 \(x=\dfrac{\sum a_i}{\sum b_i}\) \(\rm Sol.\) 题目所给的式子中含有 \(\dfrac{\sum a_i}{\sum b_i}\) 这一项,我们无法确定到底是选 \(a_

  • 『学习笔记』 质数约数 「数论」2022-07-11 20:10:12

    素数与约数 1.算数基本定理 任何一个大于1的正整数都能唯一分解成有限个质数的乘积 写作: \[ n=p_1^{c1}p_2^{c2}······p_m^{cm} \]可以直接写作: \[ \prod_{i=1}^mp_i^{ci} \]\(pi\) 都是质数且满足 $ p1<p2<······<pm$ , \(ci\) 都是正整数。 这玩意。。。好像没啥

  • @3 UOJ4282022-07-11 15:00:53

    [集训队作业2018] 普通的计数题 题目描述 点此看题 解法 调了一年结果发现是输入格式错了,你懂我的感受吗? 首先题意转化:每次操作时都会加入一个元素,把第 \(i\) 次加入的元素叫做 \(s_i\),当且仅当加入 \(1\) 时会删除元素。当加入 \(s_i\) 的时候,把这次操作中删除的 \(s_j\) 都认为

  • 算法训练营2022-07-11 14:34:01

    1. 快速排序 public static void main(String[] args) { int[] nums = {-1,0,1,2,-1,-4}; quickSort(nums, 0, nums.length - 1); Arrays.stream(nums).forEach(System.out::println); } public static void quickSort(int[] nums, int left,

  • 7.11 可持久化(主席树)2022-07-11 12:37:24

    \(\large\text{Date: 7.11}\) 可持久化 这个东西,能够维护一个数据结构的历史状态,主要做法就是(树状数据结构)开很多根对应不同版本的历史状态,然后每次修改就备份发生变化的节点,剩下的地方不变。可持久化主要是对空间有较大的优化。比如要开非常多棵线段树而空间会炸的时候就可以考虑

  • 周赛题练习-mid模块2022-07-10 23:00:57

    1864. 构成交替字符串需要的最小交换次数 解题思路 本题要求给定0和1组成的字符串,求0和1交换的最小次数组成010..或101.. 由于最终结果不是010..就是101..,因此对字符串的字符进行遍历,比较0开头和1开头最终字符串中的0和1差异数 对结果进行条件判定: 如果两种的结果都无需交换,直接

  • CF1132D Stressful Training2022-07-10 15:35:38

    题目链接 题目 见链接。 题解 方法一 知识点:贪心,优先队列,二分。 显然,这道题可以用二分答案做。check 函数可以用小根堆,让维持时间最小的先充电。 但是不优化这道题会炸。有两个关键优化:一个是快读快写能省不少时间,还有一个是把维持天数当一个变量存起来以免重复运算浪费时间。其他

  • Educational Codeforces Round 131 (Rated for Div. 2) A —— C2022-07-10 11:37:56

    A. Grass Field 解决代码: void solve() { int a, b, c, d; cin >> a >> b >>c >>d; int cnt = 0; cnt = a + b +c + d; if(cnt == 0) cout << 0 << endl; else if(cnt == 4) cout << 2 << endl; else cout << 1 &

  • 洛谷-P3178 树上操作2022-07-10 01:33:20

    树上操作 树链剖分模板 - 子树区间加和 考虑到树链剖分的时候,一颗子树内的 dfn 序一定是连续的一段区间,因此只要找到子树内最大的 dfn 序即可,也就是树链剖分 dfs 的时候回到当前结点时,记录一下当前分配 dfn 序分配到了哪个值 然后直接线段树区间加和即可 #include <iostream> #inc

  • 『浅谈』manacher算法2022-07-09 17:31:52

    『浅谈』manacher算法 简介 作为一种求回文子串的算法,manacher几乎总是能在O(n)的时间求出 在有些时候manacher需要朴素算法,请先复习朴素算法 即 该算法通过下述方式工作:对每个中心位置 , 在比较一对对应字符后,只要可能,该算法便尝试将答案加1。-----oi_wiki 正文 首先为了避免

  • P1182 数列分段 Section II2022-07-09 13:34:01

    https://www.luogu.com.cn/problem/P1182涉及知识点:贪心,二分,前缀和黄色题 思路: 答案。在此题中,我们首先要确定答案的范围。显然,答案最小可能是数列中的最大值(记为 l ),最大可能是所有数的和(记为 r)。其次,我们发现,给出一个解,判定这个解是否合法,在此题中显得简单。这启示我们

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

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

ICode9版权所有