首页 > TAG信息列表 > minV

CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) (A——D)

A. Two 0-1 Sequences 题意:从a数组的第一个和第二个元素中挑选一个元素留下来,另外一个丢掉。可以反复进行此操作。问最终a数组能否等于b数组。 思路: 注意,操作只能在第一个元素和第二个元素中进行。也就是说,一旦能删的删完了,a数组还不能等于b数组,那就是NO。 否则,从后往前看。如果b

算法40 leetcode 155.最小栈

主要是为了实现getMin函数 题目 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 伪单栈解决 压入和弹出时都同时压入

线段树入门

区间问题 区间问题可以抽象为: 修改 \(a_i\) 为 \(x\) 查询 \([l,r]\) 中最小值 我们可以使用线段树来解决这类问题。 线段树 定义以及概念 我们用一棵二叉树来表示线段树。线段树中每个节点都表示一个区间,每个区间都有左右两个子树,分别对应左半和右半。为了方便起见,令根结点 id

Leetcode152:乘积最大子数组(动态规划,维护两个状态表)

      来源 1 class Solution { 2 public int maxProduct(int[] nums) { 3 int n = nums.length; 4 int[] maxV = new int[n]; 5 int[] minV = new int[n]; 6 maxV[0] = nums[0]; 7 minV[0] = nums[0]; 8 int r

CF1553H

一种套路是考虑对相差较少的数进行统计,不过在这题并没有什么用。 另一种思考方式是这样的:考虑对位数作为状态进行dp,显然若 \(x\) 与 \(a_i,a_j\) 最高几位都相同的话他们相减显然比较优(或者说这是比较优的情况的子集:\(a_i,a_j\) 最高几位相同),那么就从低位开始枚举,需要设3个量:\(min

P1731 [NOI1999] 生日蛋糕(dfs)

P1731 [NOI1999] 生日蛋糕(dfs) 已知: ∑ i = 1 m

poj 1547(水题)

#include<iostream> using namespace std; int main(){ int n; int x,y,z,data[10]; char name[10][10]; int maxv,minv,maxi,mini; while(scanf("%d",&n)==1&&n!=-1){ maxv = -1; minv = 9999; for

P1378 油滴扩展

暴力出全排列然后求出这种放油的顺序得到的覆盖面积,求所有覆盖面积的最大值,实际做的时候ans保存的是所有半径的平方的和的最大值。 在放一个油滴A的时候,需要和之前放下的油滴B一一比较,如果A和B的距离小于B的半径,那么放不了,否则可能的半径为\(r(A)=dist(A, B)-r(B)\),和所有点比较后

牛客多校2021(五)K.King of Range(ST表、双指针)

题目:King of Range 题意:给出一个序列,问其存在多少个子序列(子序列肯定连续~)满足子序列中最大值与最小值的差大于k。 思路:ST表预处理 + 双指针维护区间。 解析:以下用\(maxv, minv\)表示该区间最大值和最小值,假设当遍历到区间[l, r - 1]时,\(maxv - minv \leq k\)​说明该区间

Edge Weight Assignment CodeForces - 1338B

原题链接 考察:构造+贪心 思路:   最小值很容易想,如果叶子结点之间的距离都为偶数,那么minv = 1.如果存在一个奇数那么minv = 3.   最大值本蒟蒻没想到,实际上只要两个叶子结点之间距离==2,那么这两个叶子结点之间必同权值.如果dist>2,那么一方可选择的值就很多,必然不会相同

[蓝桥杯][算法提高VIP]数字黑洞

\(PAT\)时做过了,再做一遍,直接模拟即可。 输入保证四位数字不全相同。 int a[5]; int n; void get(int x) { for(int i=3;i>=0;i--) a[i]=x%10,x/=10; } int calc() { int res=0; for(int i=0;i<4;i++) res=res*10+a[i]; return res; } int mai

上元节的灯会(灭)-区间dp

题目背景 上元节的庙会上,牛宝靠自己的聪明才智成功破解了花灯阵,点亮了在场所有花灯,但他没料到的是这个游戏包含AB两个项目,A项目就是点亮所有花灯,而B项目则是熄灭所有花灯。不过点亮的是花灯阵,熄灭的则是花灯环。 题目描述 熄灭花灯环的规则如下: 在一个环形的花灯圈中,每隔一段

《P1007 独木桥》题解

洛谷——P1007 独木桥 题目背景 战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒,因为这座独木桥十分狭窄,只能容纳

卡片游戏 HDU - 4550

原题链接 考察:贪心+模拟 错误思路:        预处理一遍>0的最小的数字和它在序列里出现的次数.在从头到尾遍历,讨论0与s[i]与minv的大小关系.用deque模拟 这样想其实没错,但是要讨论很多限制条件,看了别人的题解思路简单又快速... 正确思路:        从右往左找,找到除0外最

1004 成绩排名 (20 分)

水题~。 值得一提的是没有显式给出\(n\)的范围,所以要求空间复杂度\(O(1)\)咯。 struct Node { string name; string id; int grade; }cur,maxv,minv; int n; int main() { cin>>n; maxv.grade=-1,minv.grade=101; for(int i=0;i<n;i++) { c

leetcode98.验证二叉树

题目链接 https://leetcode-cn.com/problems/validate-binary-search-tree/ 个人题解 class Solution { bool isValidBST0(TreeNode* root,int &maxv,int &minv) { if (root->left == nullptr && root->right == nullptr) { maxv = roo

Feel Good POJ - 2796

原题链接 参考直方图最大矩形那道题,边界点是到权值比它小的天数为止,所以单调栈是单调递增栈,这道题我们需要的是while循环后的边界点,如果在while循环里取第一个点反而会导致答案错误,因为存在这种情况: 7 5 3 如果取while循环里第一个点就会少算7 #include <iostream> #includ

1210. 连号区间数

文章目录 1210. 连号区间数 AcWing网站原题通道 1210. 连号区间数 题意分析:给我们1~N的排列,让我们求出这个排列中有多少个连号区间,,连号区间也就是对这个区间排序之后,相邻两数相差为1。先分析数据范围有105,那么我们可以使用时间复杂度为O(nlongn)的算法,如果想不出来可

1101 Quick Sort (25分)

开始觉得是个什么两次遍历法,后来发现是RMQ问题,可以选择线段树,树状数组,ST表三种 再看数据范围:\(N <= 10^5\) 线段树/树状数组:\(O(nlogn)\) ST表:\(O(n)\) #include<iostream> #include<cmath> #include<vector> #include<algorithm> using namespace std; const int N = 100010;

2020/4/26 腾讯软件综合开发笔试第二题代码

2020/4/26 腾讯软件综合开发笔试第二题代码 最基本的思路是对于每一个B组中的点,去遍历A组中的每个点,求距离,这样的复杂度是O(n^2),可以过60%。 接下来进行优化,利用了二分的思想。首先将A组和B组分别先根据横坐标再根据列坐标排序。想象上面所描述的遍历过程,我们的目标是对于B

题解 NOI2004【郁闷的出纳员】

\[ Preface \] 之前用 treap 打,交了四遍才过。 自学了 fhq treap 后,才意识到是一道 fhq treap 板子题,直接码上,一遍就过。 本题解提供的是 fhq treap 做法(感谢 fhq 神犇),不太了解 fhq treap 的同学可以去了解一下 fhq treap ,挺好理解的。(至少要了解两种 split 和 merge 操作) \[ Desc

BZOJ1941Hide and Seek

做KD_tree的入门题。 问题就是求出任意一个点距其他点的最大曼哈顿距离和最小曼哈顿距离差,然后对其取min即可。 这个东西就是KD_tree可以轻松解决的了。 下面总结一下做KD_tree(不带修)的心得。 KD_tree本质上是一颗搜索树,实际上将所有可能的决策集合不重不漏的划分了出来,而我们要做

线段树(四)——两个标记(add和set)

add无序,set有序。规定同时有两个标记时,表示先执行set再执行add。 1. 更新操作: 1 int op,cl,cr,v; 2 void update(int o, int L, int R) { 3 int lc = o*2, rc = o*2+1; 4 if(cl <= L && cr >= R) { // 标记修改 5 if(op == 2) addv[o] += v; 6 else { setv[o

leetcode1093

这道题,我看了半天没看懂,等看懂的时候,时间都快结束了。 class Solution: def sampleStats(self, count: 'List[int]') -> 'List[float]': l = [] sums = 0 n = 0 maxv = -1 minv = 256 modev = -1 modetime = 0

线段树(2)——区间修改

快速序列操作 (1) 温馨提示:本文只对刘汝佳《训练指南》做注释,将博主初学时难懂的,认为重要的解释一下,只求自己记住它的打法和用法,如有不懂,随意联系,谢谢 关于此文的注释问题: 有些博主读书时遇到的问题,解释就近写在文末,但在阅读时没有对代码产生疑惑的,我都木有注释... sum的新定义 将sum