ICode9

精准搜索请尝试: 精确搜索
  • P3963 [TJOI2013] 奖学金——主席树2022-08-25 22:00:12

    最后翻看题解才发现可以不用主席树……就当是练习好了 基本思路 本题要让中位数最大,如果是最小值最大我们可以用二分答案,二中位数最大可不可以呢?显然是不行的,所以我们枚举中位数,判定是否可行。 本题中,\(n\)为奇数。根据贪心,在比中位数大的数据中选\((n-1)/2\)小值,比中位数小的数中

  • 序列查询新解2022-08-25 20:35:52

    https://www.acwing.com/problem/content/4284/ #include <iostream> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; const int N = 100010; int n, m; int a[N]; int R; LL get(int l, int r) // 求g[l] + g[

  • P3755 [CQOI2017]老C的任务 题解2022-08-25 12:05:25

    CDQ分治 对于这道题,可以参考 P4390 [BOI2007]Mokia 摩基亚 的做法,可以通过 CDQ 分治离线操作高效处理出答案(我常数大,不能体现出 CDQ 分治的优秀)。 可以发现,操作 11 和操作 22 分好了界限,于是我们只需要统计答案,不用再使用树状数组维护。 对于 CDQ 分治,我们可以先看一

  • 二分查找法2022-08-24 20:00:10

    使用二分查找的条件: 有序数组 需求 在数组{1,2,3,4,5,6,7,8,9,10}中,查找某个元素的位置 实现步骤 定义两个变量,表示要查找的范围。默认min = 0 ,max = 最大索引 循环查找,但是min <= max 计算出mid的值 判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引

  • 01分数规划2022-08-24 01:02:45

    01分数规划 经典例题:POJ2976 给定 \(n\) 个物品的价值 \(a\) 和 花费 \(b\) ,取其中的 \(k\) 个物品,求 \(\sum a[i] / \sum b[i]\) 的最大值。 题解: 假设 \(\sum a[i] / \sum b[i] = x\) ,则: 当 \(x\) 不是最优解时,\(\sum a[i] / \sum b[i] \ge x\) 成立,则存在一种组合使 \(\sum(a[

  • 8.23复学记2022-08-23 01:31:22

    水了114514天,要开始认真地学习啦! P3834 【模板】可持久化线段树 2 主席树 点击查看代码 #include <algorithm> #include <cstdio> #include <iostream> const int N = 2e5 + 3; int n, m, a[N], p[N], T[N], s, cnt;//T树根编号 int sum[N << 5], L[N << 5], R[N << 5

  • 切绳子2022-08-22 22:01:57

    切绳子 思路:运用二分查找,与木材加工题的思路相同。 只是这个是针对浮点数的,多了将绳子长度转化为整形,最后输出再转回高精度。 代码如下: #include<iostream> using namespace std; int n,k; int len[1000010]; bool check(int mid)//每段绳子长度 {       long long sum=0

  • 一元三次方程2022-08-22 20:34:20

    根的绝对值>=1,可知在区间[i,i+1]内最多只有一个解。将(-100,100)for 循环分成若干区间令l=i,r=i+1;判断f(l)是否为0,再判断f(r)是否为0,如果为0,直接跳过。当左右点都不为0时走到下一步利用二分,判断。 当f(mid)*(r)>0 那么可知根一定在左边区间 即r=mid,否则的话,l=mid;

  • 木材加工2022-08-22 20:32:42

    木材加工 思路:二分查找。 从木棍长度的中间分别向两边找,直至找出既满足木棍个数 长度又长的木棍长度。 代码如下: #include<iostream> using namespace std; int n,k; int len[1000010]; bool check(int mid)//mid为木棍长度 {       long long sum=0;//sum记录木棍个数  

  • 木材加工2022-08-22 20:01:30

    我们依次要判断 a 中的每一个数并计算出能切出多少个 mid ,还要用一个变量 ans 储存他们,如果 ans 分的分数比 k 多或者正好等于,返回真。如果是小于 k ,返回假。 当 f 返回的是真的时候,我们就要试试还能不能把 mid 调大一点,就要l = mid; 如果返回的是假,我们就加的太大了,就要把 midmi

  • [2015年NOIP提高组] 跳石头2022-08-22 20:00:08

    运用二分策略 先写函数确定距离,然后看要搬的石头数满足题意吗。距离确定后,把间距小于确定距离的需要全部搬走。 然后向左或向右再找更小或大的距离 每次都检查是否能仅移走m块岩石使得所有跳跃距离均大于等于mid 最后输出 代码: #include<bits/stdc++.h>using namespace std;long l

  • [2015年NOIP提高组] 跳石头2022-08-22 19:32:38

    一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 N 块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。 为

  • LeetCode 367. 有效的完全平方数2022-08-22 19:02:06

    LeetCode 367. 有效的完全平方数 思路: 核心为最后一步判断当二分结束后值为及接近一个整数的浮点数(如2.9xxxx)此时加上极小数(1e-6)取整再平方,若与num相等则为完全平方数 class Solution { public: bool isPerfectSquare(int num) { if (num == 0) return true;

  • LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置2022-08-22 18:31:31

    34. 在排序数组中查找元素的第一个和最后一个位置 思路: 与AcWing 789一致 class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { if (nums.size() == 0) return {-1, -1}; int begin, end; int l = 0, r = nums.size(

  • 二分、三分、01分数规划2022-08-22 17:34:33

    二分、三分、01分数规划 二分查找 单调函数求零点 二分查找:在一个单调有序的集合中查找元素,每次将集合分为左右两个部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。 //找>=x的第一个位置 //求最小值 int l=0,r=ll,mid; while(l<r) { mid=l+(r-l>>1); //(l+r)

  • P2440 木材加工2022-08-22 17:34:04

    P2440 木材加工 分析:根据题意,先对所有的木材长度进行排序方便二分查找,写一个查找函数,每个木材都除以当前的切割长度(mid),看能切出几段,如果切出的段数大于要求的段数,证明查找失败,在主程序内的mid(也就是当前的切割长度)就要将范围缩小一半,如果得出的段数少于给定段数,范围就反向缩小一

  • AcWing算法基础课---第一讲基础算法---01排序2022-08-22 11:00:18

    快速排序 步骤 确定分界点:q[l], q[(l+r)/2], q[r], 随机 调整区间 递归处理 void quick_sort(int q[], int l, int r) { if (l >= r) return; //递归结束条件 int i = l - 1, j = r + 1, x = q[l + r >> 1]; //定义i, j指针, 确定分界点x(一般取中间值) while (i

  • P3605 [USACO17JAN]Promotion Counting P 题解2022-08-21 23:00:08

    solution 考虑权值线段树合并:首先离散化,然后对于一个节点,我们将它的所有子树合并上来,并统计所有能力指数的个数(权值线段树基本操作),查询时只需查询 \(p_i+1\sim n\) 的和即可 code #include <bits/stdc++.h> #define Tp template<typename Ty> #define Ts template<typename Ty,typ

  • 暑期集训72022-08-21 16:32:23

    130 rank 39 T1:T2:暴力模拟T3 T4:【甜圈】线段树(hash区间加乘或者直接维护区间信息) T4:给你n个盒子,初始为空,支持t个操作,每次(l,r,xi),表示在[l,r]区间编号的盒子有序放上xi编号物品。求最终满足盒子里的物品恰好是k个而且编号从小到大1--k的盒子数量。 [1]赛时自己打了个线段树,WA

  • A-想要更多的0_2022河南萌新联赛第(六)场:郑州大学 (nowcoder.com)2022-08-20 16:34:28

    A-想要更多的0_2022河南萌新联赛第(六)场:郑州大学 (nowcoder.com) 这个题思路倒是很好想到主要是处理[0,n]区间内0出现的次数 考虑这个问题 比如对3891205举例。 我们取到数第四位数,其形式也就可以是xxx0xxx这种情况你前面可以取[1,389]后面可以取[0,999]所以答案就是389*1000。这

  • 整体二分学习笔记2022-08-20 12:30:42

    # 整体二分 本文代码见[这](https://oi-wiki.org/misc/parallel-binsearch "这")。 二分,精髓就在于一个"猜测"。猜测答案是否小于 $mid$ 、是否等于 $mid$ 。 先想一个简单的问题:一次查询全序列中排名为 $k$ 的数。 排名的定义是:小于一个数的数的个数+1。 当然可以排序然后输出。

  • 算法竞赛进阶指南 0x65 负环与差分约数2022-08-20 00:32:52

    这里与最短路密切相关 可以使用spfa,利用spfa的原理(cnt数组),如果发现一个点是通过了超过n-1条边更新而来,那么就说明存在负环 AcWing361. 观光奶牛 给定一张 L 个点、P 条边的有向图,每个点都有一个权值 f[i],每条边都有一个权值 t[i]。 求图中的一个环,使“环上各点的权值之和”除以“

  • 22.8.192022-08-20 00:30:20

    22.8.19 ABC256_H 题意: 要求实现三种操作 将区间 \(L\) 到 \(R\) 中的数变为 \(\lfloor \frac{a_i}{x}\rfloor\) 将区间 \(L\) 到 \(R\) 中的数变为 \(x\) 查询 \(L\) 到 \(R\) 的区间和 思路: \(x\geq2\), 那么考虑一个数最多做 \(log\) 次操作一, 对于操作二, 最多将势能

  • 凸优化|凸集2022-08-19 11:34:06

    1. 直线和线段 假设 \(x_1\ne x_2\) 是 \(\mathbf{R}^n\) 空间(n维欧氏空间)中的两个点,直线 \[y=\theta x_1 + (1-\theta)x_2 \]是穿过 \(x_1\) 和 \(x_2\) 的直线,\(\theta\in \mathbf{R}\) 。若满足 \(\theta\in(0,1)\) ,则 \(y\) 为连接 \(x_1,x_2\) 的线段上的一点。 2. 仿射集(af

  • 二分法代码笔记2022-08-18 19:00:42

    二分法代码笔记 最近复习二分法的题目,发现左右区间的二分写法总是无法第一时间写出正确的,故痛定思痛,通过写笔记的形式记录下来。 这里需要说明的是,二分法多用于单调情况下的LogN复杂度的搜索,并非只用于排序数组。二分法是一种高效的搜索方法,前提是能分析出问题是随某一个自变量的

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

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

ICode9版权所有