数据结构
beckyUp
他强任他强,过题我在行
展开
-
LRU算法的实现2【数据结构】
理论上不能算是最好的算法,但是这个方法也可以。#include <bits/stdc++.h>using namespace std;template <typename K,typename V>class LRU{private: unordered_map<K,pair<V,int> > keyTable; map<int,K> timeTable; int nowTime=0;public: void insert原创 2020-06-06 15:14:33 · 237 阅读 · 0 评论 -
bzoj4299 Codechef FRBSUM【主席树】
题目分析当我们考虑如果能够 组成 [0,x]的所有的数,那么这些数都能扩展区间,因此,我们考虑每次统计 小于 x的所有数的和,和就是当前能够扩展的区间,然后再统计小于和的所有值的和,不断倍增就可以了。所以用一个主席树维护一下复杂度是 O(nlognlogn)O(nlognlogn)O(nlognlogn)代码详解#include <bits/stdc++.h>using n...原创 2019-11-05 21:04:49 · 154 阅读 · 0 评论 -
codeforces 1252K Addition Robot【线段树+矩阵乘法】
题目大意给你一个串 包含AB两种元素,进行以下两种操作1、给定一个区间[l,r][l,r][l,r] 将 A 变成 B,B 变成 A2、给定一个查询区间 [l,r][l,r][l,r] 以及 两个数 x,y在区间 [l,r][l,r][l,r]中如果 s[i]=As[i] =As[i]=A 那么 x = x+y否则 y=x+y查询这个区间最后的x,y分别是多少题目分析刚拿到这个...原创 2019-10-28 18:36:58 · 487 阅读 · 0 评论 -
codeforces1251E2 Voting【优先队列+思维】
题目大意给出 nnn 个人,每个人两个值 m[i]m[i]m[i], p[i]p[i]p[i] ,p[i]p[i]p[i] 表示 收买这个人给你投票需要的花费 ,m[i]m[i]m[i]表示,如果已经有m[i]m[i]m[i]个人给你投票, 第iii个人就会免费给你投票。题目思考这个题是一个比较强的思维题。首先我们一定可以知道以下几个关系:1、如果我能够让第i个人免费给我投票的话,那么 ...原创 2019-10-25 15:36:13 · 393 阅读 · 0 评论 -
牛客练习赛53 老瞎眼 pk 小鲜肉[思维+离线+线段树]
题目大意给定一个序列,q个查询查询(l,r)内 异或值=0 的最小区间题目分析考虑对序列求一个前缀异或和那么 每个点找到与自己相同的最近的点的位置,就是每个点作为右端点 =0 的最小区间。所有的查询区间按照右端点排序然后我们枚举1,n所有点,在线段树 该店对应左端点的位置插入这个区间长度。对于所有右端点为i的询问 查询(l,r)区间内的最小值即可代码详解#include &l...原创 2019-10-12 17:28:57 · 305 阅读 · 0 评论 -
2018 Multi-University Training Contest 3 A题. Ascending Rating(单调队列)
题目大意,就是给你一个序列,在序列中对于每一个长度为m的区间,求区间最大和 每次递增的取区间内数的个数,然后求一个 最大值与i的异或和 和个数与i的异或和题目分析,我们倒过来用一个递减的单调队列,那么队列中的数,很显然就是正的时候我们需要的递增的数,队列长度即为cnt,队首元素即为最大值,每次当队首的位置不在区间,就出队,维护一个单调队列即可#include <bits/stdc++...原创 2018-08-16 16:32:30 · 136 阅读 · 0 评论 -
HDU 5875 Function【线段树】
这个题类似南京网络赛的题目题目大意是给你一个区间[l,r] 让你求 a[l] %a[l+1]%a[l+2]%….%a[r]的值 我们发现只有取模一个小的数的时候结果才会变化,所以我们只要求 [l+1,r] 区间内第一个比当前树小的即可用一个线段树来维护区间最小值,然后优先向左边查询#include <iostream>#include <cstdio>#i...原创 2018-09-05 11:05:22 · 111 阅读 · 0 评论 -
Lpl and Energy-saving Lamps【线段树求最左边小于k】
#include <iostream>#include <cstdio>#include <cstdlib>#include <vector>#include <algorithm>#include <queue>using namespace std;#define cl(a) memset(a,0,sizeo...原创 2018-09-05 11:26:58 · 124 阅读 · 0 评论 -
2018icpc 沈阳网络赛 I Lattice's basics in digital electronics【哈夫曼编码】
#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int maxn=4e6+50;char s[300][20];char info[maxn];int bin[maxn];int fial[maxn];int idx=0;int M,N,Q;int cnt=0;int tot;struct node{ ...原创 2018-09-08 17:42:43 · 179 阅读 · 0 评论 -
ACM-ICPC 2018 徐州赛区网络预赛 Trace【线段树】
题目大意,这个题就是给你若干个点,这些点与坐标轴围成一个矩形,然后后面的矩形可以覆盖前面的矩形,问最后还留在平面中的线段的长度是多少分析:离散化以后倒过来扫点,比如说求x,就用线段树维护当前 [y,inf]区间内最大的x,即为maxx 那么如果 x>maxx 那么其贡献就位 maxx-x ;并且更新y点的值为x y同理;#include <bits/stdc++.h>...原创 2018-09-09 19:18:01 · 345 阅读 · 0 评论 -
一道简单题 Uva11991【vector】
事实上就是一个vector的应用题题解用了 map 实际上并不用map#include <bits/stdc++.h>#define sc(x) scanf("%d",&x)using namespace std;const int maxn=1e6+50;vector<int>u[maxn];int a[maxn];int main(){ ...原创 2019-04-09 21:32:06 · 143 阅读 · 0 评论 -
Gym - 101908C[树状数组+离散化]
降维,横纵分开考虑。多一个交点就多一块计算有多少交点。树状数组维护一下逆序对就可以了#include <bits/stdc++.h>#define cl(a) memset(a,0,sizeof(a))#define sc(x) scanf("%d",&x)using namespace std;typedef long long ll;typedef pair&...原创 2019-04-21 22:32:58 · 240 阅读 · 0 评论 -
乒乓比赛【树状数组】
树状数组水题#include <bits/stdc++.h>#define sc(x) scanf("%d",&x)using namespace std;const int maxn = 20006;const int maxm = 1e5+50;typedef long long ll;int n;int a[maxn];int bit[maxm];in...原创 2019-04-23 20:50:02 · 402 阅读 · 0 评论 -
2018 Multi-University Training Contest 8 Taotao Picks Apples[离线+单调队列+二分]
题目大意:给你n个数,然后你可以从左到右每次选择最大的,总共可以选k个数,然后现在给你q次修改,每次修改某个位置的某个数,问你现在还能选几个数分析:这个题目有点类似前几场做过的一个单调队列的题,我们如果倒过来把所有的数放在一个单调递减的队列里面,那么这个队列里的数就是由第i个数开始能够选的个数,那么我们只要离线把所有的询问按照修改的位置从大到小排序,相同的情况,按照修改的数由小到大排序,那么我...原创 2018-08-15 18:21:08 · 127 阅读 · 0 评论 -
2018 “百度之星”程序设计大赛 - 初赛(A) 度度熊学队列【链表的应用】
度度熊学队列 Accepts: 958 Submissions: 5545 Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem Description 度度熊正在学习双端队列,他对其翻转和合并产生了很大的兴趣。初始时有 NN 个空的双端队列(编号为...原创 2018-08-11 17:11:05 · 209 阅读 · 0 评论 -
CCPC-Wannafly Camp #2 J Princess Principal 【离线+栈】
分析:这个题目,我们离线处理所有的查询区间,将所有区间按照右端点排序,然后通过栈去匹配括号,左括号直接入栈,右括号的话,如果匹配上了,就出栈,如果没有匹配上了,就留在栈中,当我们扫描到第i个的时候,对于右端点为i的询问,我们判断它的左区间是否比栈顶元素要小,如果小的话,就不能够匹配上了,如果大的话 我们会发现,我们通过这样处理可以保证查询的右端点在右区间,但不能保证询问的左端点,所以我们预处理...原创 2018-08-06 09:24:28 · 495 阅读 · 0 评论 -
2018年全国多校算法寒假训练营练习比赛(第四场) A 石油采集
链接:https://www.nowcoder.net/acm/contest/76/A 来源:牛客网题目描述随着海上运输石油泄漏的问题,一个新的有利可图的行业正在诞生,那就是撇油行业。如今,在墨西哥湾漂浮的大量石油,吸引了许多商人的目光。这些商人们有一种特殊的飞机,可以一瓢略过整个海面20米乘10米这么大的长方形。(上下相邻或者左右相邻的格子,不能斜着来)当然,这要求一瓢撇过去的全部是...原创 2018-02-11 23:03:54 · 470 阅读 · 0 评论 -
线段树的模板【区间更新,区间查询】
线段树的模板 线段树讲解#include <bits/stdc++.h>#define fill(arr,val) memset(arr,var,sizeof(arr)using namespace std;const int maxn=1e5+50;const int mod=1e9+7;typedef long long ll;struct node{ ...原创 2018-02-28 16:38:28 · 192 阅读 · 0 评论 -
2016湖南省赛 G Parenthesis [RMQ]
这个题,给你一串括号序列 问你交换 ai,bi两个位置的括号,原串是否依然匹配 题目分析,对于一个括号序列,我们只要找到一个右括号,在它之前没有左括号与它匹配,那么就是不匹配的序列,将左括号记为-1 右括号记为1 求前缀和 如果前缀和 >=1 那么一定就不匹配了 由于有很多查询,所以,我们用Rmq 求 [ai,bi) 区间最大值, 只有在ai 和bi 是 从 “(” 和”)” 换成...原创 2018-05-01 21:49:27 · 181 阅读 · 0 评论 -
OpenJ_Bailian - 2805 正方形 【map】
题目大意,给你n个点,让你判断有几个正方形n<=1000 题目分析:这个题就简单暴力枚举任意两个点,判断剩下两个点是否在内就可,一开始试图用hash去判断是否存在,后来没有找到合适的hash方式=-= 还是太菜,这个题的话,直接用map就可以了,先对点进行排序,然后放到map里,然后再判断是否存在就行 还有一个坑点就是,枚举任意两个点 的时候有顺序关系,所以,注意循环的时候i [1…...原创 2018-06-22 15:19:20 · 193 阅读 · 0 评论 -
HDU 5266 pog loves szh III [lca 倍增算法]
之前我们在面对一个查询的时候,直接采用最暴力的搜索去完成此工作,现在,当我们面对有很多组数据的时候,发现一个一个的查询效率实在是太慢了,所以我们采用了一种新的方式,那就是倍增这个题就是给定Q个查询,查询一棵树上两个点的LCAQ&amp;lt;3e5 and N&amp;lt;3e5这时候,我们就可以采取倍增的做法,我们原本是一个一个向上找祖父结点,但是这样太慢了,如果一直我们向上的距离是d的话,那么我...原创 2018-06-26 03:47:01 · 143 阅读 · 0 评论 -
LCA的最暴力解法—openjudge 1330
题目大意:给一棵树,给定两个点,找到他们的最近公共祖先 题目分析:这个题目的查询只有一次,我们只需要用最暴力的方法去完成就可以了题目详解: 给定一棵树,我们想要找到他的最近公共祖先,我们用一个数组来记录每个结点的父亲结点。那么我们要想找的最近公共祖先,一定在该结点的祖先结点及其本身之内(祖先结点就是该点的父结点和父结点的父结点及向上找所有的父结点)。 那么...原创 2018-06-25 22:16:17 · 730 阅读 · 1 评论 -
codeforces 1000C [经典题目]【排序,数据结构】
据说是一个非常经典的题目,我竟然疑似第一次做,emmmm,看来还是题目做的太少,也是学习太不系统了【毕竟靠自己摸索。。。】题目分析:给你n个区间,问你区间中被覆盖的次数恰好为K的点的个数有多少个 对于每一个k 属于[1…n] 输出这样的点的个数 我们随意画一个图,就可以发现,如果我们将所有点都进行排序,然后遇到左端点就+1,遇到右端点就-1,这样我们就可以得到每一个区间的此时的覆盖数,这样...原创 2018-06-28 20:38:45 · 1122 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第一场) D Two Graphs(图的同构)
题目大意:给你两个图 G1 G2,让你在G2中找有多少个子图与G1 同构题目分析 首先这个题目的数据量非常小 n=8 ,所以我们可以采取非常暴力的做法,由于G2中如果有点与G1同构的话,我们发现只要改变G2中 点的序号,此时的新图中如果有一部分与G1完全相同,那么这些点构成的图就会与G1同构。这样我们可以对G2中的点进行全排列,判断G1中存在的边的位置,新的G2中是否也存在同样的边即可 然...原创 2018-07-29 21:40:58 · 195 阅读 · 0 评论 -
数据结构-BST UVA 11020
查找某一点其左下方没有其他点的点的个数其实是平衡数的添加删除查找的操作,用系统自带的multiset自动完成该任务#include <bits/stdc++.h>using namespace std;const int maxn=1e5+50;const int inf=0x3f3f3f3f;typedef long long ll;struct Point{...原创 2018-07-27 14:14:59 · 192 阅读 · 0 评论 -
TREAP 的基本操作
struct Node{ Node *ch[2]; //左右子树 int r,v; //r 表示优先级 数值越大,优先级越高,v表示键值 int cmp(int x)const { if(x==v) return -1; return x&lt;v ? 0:1; }};void Rotate(Node* &amp;o,...原创 2018-07-27 15:00:04 · 126 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第三场) C Shuffle Cards (SPLAY)
这个题就是每次把一段区间移动到区间的最前面,问你若干次操作后的序列按照题解说,这个题就是一个平衡树的操作题,之前没有做过平衡树的题,但是移动区间的时候想到了连续的翻转操作可以使得区间移动,所以,然后找了一个splay区间翻转的板子过了这个题,赛后发现stl 中有十分简单的工具可以实现。 看来要学习的东西还有很多#include&lt;stdio.h&gt;#include&lt;a...原创 2018-07-27 16:53:19 · 203 阅读 · 0 评论