![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
线段树、树状数组、单调栈等
~KIKI~
这个作者很懒,什么都没留下…
展开
-
B找山坡
题目链接:2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)B题目大意大小为n的数组a,存在一个区间,左右边界值相等,区间内所有数都大于等于边界值,问这样的区间右端点和左端点之差的最大值。 1<=-n<=1e6, 1<=ai<=1e9思路可以将一个值存在的位置都存vector,然后遍历这个vector,相邻位置区间最小值大于等于这个值的话,两个区间可以合并,然后取区间最大值即可,这里直接用线段树。不过由于数值比较大1e9,可以先进行离散化处理。ac代码原创 2021-03-29 11:26:23 · 141 阅读 · 0 评论 -
D 动态序列
题目链接:2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)D题目大意n个数q次询问,每次询问分五种,op=1表示序列中所有数乘k,op=2表示序列中所有数加上k,op=3表示序列头部增加一个整数k,op=4表示序列尾部增加一个整数k,op=5表示输出序列第k个位置的数,结果对qe9+7取模。思路就是线段树先乘后加,最后输出区间和,不过这里的区间是单点。可以用l表示区间左端点,r表示区间右端点。先跑一边询问,用双向队列方便首尾加数,看最后序列一共的个数len用于建树,然后更新查询原创 2021-03-29 11:06:41 · 178 阅读 · 0 评论 -
线段树 模板
区间查询最值,区间和#include<bits/stdc++.h>using namespace std;#define io cin.tie(0);ios::sync_with_stdio(false);#define debug(x) cout<<#x<<"="<<x<<endl#define lowbit(x) x&(-x)#define pii pair<int,int>#define mk make_原创 2021-02-05 22:35:05 · 165 阅读 · 0 评论 -
2020杭电多校第二场(解题报告)
Total Eclipse题意:有个n个点m条边的图,每个点都有权值,每次可以选择一个点权全是正数的连通块,让他们的权值整体-1,问把所有点权值变成0需要多少次操作。(1≤n,m≤1e5)样例输入:13 23 2 31 22 3输出:4hint:并查集。正难则反。反着操作,先按照权值从大到小排序,从最大点开始倒着添加边,一开始加入新的点,作为单独的个体i,需要操作ai次,然后把他相邻的边依次加上。当他的存在使得两个连通块融合时,那么两个连通块共享这个i,并且两.原创 2020-07-24 20:09:54 · 254 阅读 · 0 评论 -
牛客编程巅峰赛S1第3场 -黄金&钻石(解题报告)
题目链接:https://ac.nowcoder.com/acm/contest/6383A-找卧底题意:原本有n个人,现在多了一个卧底,找出排列中个数超过1的数hint:用vis标记一下已经存在的人,如果已经存在了,那么当前这个人就是卧底AC代码:class Solution {public: /** * * @param n int整型 * @param a int整型vector * @return in...原创 2020-07-25 11:00:09 · 128 阅读 · 0 评论 -
2020杭电多校第三场1005(并查集)
Little W and Contest(并查集)题意: acm组队,有n名队员,每名成员担当读题或者编码的任务,读题能力为1,编程能力为2,每个队伍三名成员,成员能力值至少为5,刚开始队员之间相互不熟悉,每过一天就会有人相互熟悉,并且也会熟悉双方的朋友,问每天最多可以组多少队。hint:用并查集。记录并查集中能力为1的人数,能力为2的人数,当两个并查集合并时要去掉两个并查集之前能配对的组合数,并且合并两个并查集的能力值个数。#include <bits/stdc++.h&.原创 2020-07-29 20:19:04 · 147 阅读 · 0 评论 -
Closing the Farm S(并查集)
题目链接:https://www.luogu.com.cn/problem/P3144原创 2020-07-31 11:03:29 · 296 阅读 · 0 评论 -
2020牛客多校第八场 解题报告GIK
题目链接:https://ac.nowcoder.com/acm/contest/5673G-Game SET题意给了n张SET牌,包含了万能牌,输出任意一种可以够成SET的方案。 形成SET条件:抽3张牌,每张牌有四个属性,如果这3张牌的对应的属性要么都相同,要么都不同。“*”是万能牌可以充当对应属性任何值,当然每个属性只有三种值。 如果有随便输出一组,否则输出 -1思路直接暴力枚举,三个for循环 如果属性一栏有万能牌的,那么其他两个无论取什么都能使得该属性一栏要么都相同要么..原创 2020-08-04 10:42:23 · 211 阅读 · 0 评论 -
D-点一成零(并查集)
题目链接:点这里~题目大意牛牛拿到了一个n*n的方阵,每个格子上面有一个数字:0或1,行和列的编号都是从0到n-1 现在牛牛每次操作可以点击一个写着1的格子,将这个格子所在的1连通块全部变成0。上下左右两个方格是连通的,公用一条边。 k次询问,每次询问给出x,y,将(x,y)方格变成1,牛牛想知道,每次“将某个格子修改成1”之后,“把全部格子的1都变成0”的方案数量。 范围:1<= n <= 500, 1 <= k <= 1e5思路变0为1,就相当于要将连通块合并原创 2021-02-02 19:51:20 · 187 阅读 · 0 评论 -
牛客巅峰赛第五场 黄金&钻石&王者
题目链接:https://ac.nowcoder.com/acm/contest/6489A-完全平方数的尾巴题意:判断给定的数x(0<=x<=999)是不是由某个完全平方数对1000取模的结果样例:hint:该题就是打个表,给1到500(这个也可以更大)的平方对1000取模的值标记为true,然后直接输出a[i*i%1000]就好了。AC代码:class Solution {public: bool solve(int x) { ...原创 2020-07-24 14:28:00 · 109 阅读 · 0 评论 -
zcmu1607: 大二下之悬梁刺股(树状数组)
链接:https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1607题目大意n个数ai,q次询问,问1到x之间有几个数比a[x]大思路离散化+树状数组离线处理用unique离散化就知道了相对大小,然后可以用树状数组记录第i位之前有几位比他大了,记录ans数组,然后询问的时候直接访问ans数组ac代码#include <bits/stdc++.h>using namespace std;#define ll lon.原创 2021-01-08 12:44:14 · 157 阅读 · 0 评论 -
2020杭电多校第一场 1009 单调栈
1009 Leading Robots题意:给你n个机器小车,和他们的初始位置p和加速度a,初始速度都是0,时间无限量,同时向右行驶,问你在行驶过程中有多少辆小车会处于领先位置?并行驱使不算领先。输入:131 12 33 2输出:2hint:单调栈的做法。先将所有小车按照加速度从小到大的顺序排列,加速度相同时按照初始位置从小到大排列。如此以来,后面的车都能超越前面的车。所以维护一个栈,(栈中:栈顶。栈前:栈顶前一个位置。后车:要入栈的车子。)存放领先的车子,后.原创 2020-07-23 11:14:02 · 186 阅读 · 0 评论 -
F-牛牛与交换排序(思维、双向队列)
题目链接:点这里~题目大意给你一个长度为n的全排列,你可以选择长度为k的区间,然后对这个区间进行翻转 翻转操作可以无数次执行,但是每次翻转长度固定,而且翻转区间左端点是不递减的,即 问能否将其变成1到n的升序?如果可,输出任意一个k。思路翻转就相当于是将归位,因为长度固定,翻转区间左端点不递减,所以如果说这次不归位,那么下次就再也没机会了,因为属于你的位置再也见不到了。 那个就找到第一个a[i]!=i的位置,找到i的家,记为pos,那么再找到a[i]==pos的位置,找到走失的i的位置,原创 2021-02-03 22:25:34 · 273 阅读 · 0 评论