数据结构
文章平均质量分 82
数据结构
AimerAimerAimer
我人很懒,什么都没写
展开
-
树状数组模板 P3374(洛谷)
#include <iostream>#include <cstdio>#include <cmath>#include <stack>#define ll long longusing namespace std;const int N=5e5+5;int a[N],n,m,b[N];int lowbit(int x)//x...原创 2020-03-24 11:18:17 · 178 阅读 · 0 评论 -
ST表 P3865(静态区间最大值)(洛谷)
倍增思想RMQ预处理复杂度O(nlogn),查询复杂度O(1)st【i】【j】表示查询数组区间【i,i+2^j-1】的最值。#include <iostream>#include <cstdio>#include <cmath>#include <stack>#define ll long longusing namespace ...原创 2020-03-24 00:13:57 · 225 阅读 · 0 评论 -
P1886 滑动窗口 /【模板】单调队列(洛谷)
问题:查询区间的最值q[]:单调队列,存储数值p[]:存储下标下标从1开始单调队列可以队首队尾出队,队尾进队队首即为最值(最大值或最小值)#include <iostream>#include <cstdio>#include <stack>#define ll long longusing namespace std;const i...原创 2020-03-23 21:16:48 · 203 阅读 · 0 评论 -
POJ 2559(单调栈) 最大矩形面积
#include <iostream>#include <cstdio>#include <stack>#define ll long longusing namespace std;const int N=1e5+5;int a[N],n;int main(){ ios::sync_with_stdio(false); c...原创 2020-03-23 19:53:29 · 330 阅读 · 0 评论 -
P5788单调栈(洛谷)
在数组中求每个元素之后第一个比它严格大的数的下标思路:单调栈:递减,存储下标从后往前遍历数组#include <bits/stdc++.h>using namespace std;const int N=3e6+5;int a[N],n,b[N];int main(){ ios::sync_with_stdio(false); cin.tie(0...原创 2020-03-23 16:39:26 · 400 阅读 · 0 评论 -
Trie树(模板)
链接#include <bits/stdc++.h>using namespace std;const int maxn=1e5+5;int son[maxn][26];//maxn是深度的累计int cnt[maxn],idx;void Insert(string x)//建树{ int p=0;//根节点 for(int i=0;i<x.s...原创 2020-02-26 22:05:20 · 85 阅读 · 0 评论 -
字符串匹配 (BF+KMP)
S串:aaapT串:aapBF算法:下标从0开始S[i]!=T[j] ------> i=i-j+1; j=0; i 回溯,j 被置为0#include <iostream>#include <string>using namespace std;int BF(string S,string T){ int n1=S.si...原创 2020-02-26 17:10:02 · 181 阅读 · 0 评论 -
acwing 801 最长连续不重复子序列(双指针)
i:快指针j:慢指针窗口滑动需要一个计数的数组或者unordered_map<int, int>链接#include <bits/stdc++.h>using namespace std;int a[100005],n,b[100005];int main(){ ios::sync_with_stdio(false); cin >...原创 2020-02-25 21:25:08 · 112 阅读 · 0 评论 -
POJ 2443 ( bitset )
题意:给定n个集合,问x和y是否同时属于至少一个集合,x可以等于y。思路:bitset#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <bitset>#include <string>#de...原创 2020-02-25 12:56:04 · 143 阅读 · 0 评论 -
HDU 6187 Destroy Walls(并查集)
题意:给定n个点,m条边,实现将全部点连通(最小生成树),即去掉回路(环),所需的最少费用。思路:n太大,prim算法会超时。使用并查集+贪心:先将已有边的权值从大到小排序,又n个点只需n-1条边,这时再遍历一遍,将有边的两点合并为一个队伍,当边的数量达到n-1时退出循环,因为此时已达到最小生成树。边的权值由大到小排序是因为要将大的权值用来合并,剩下的小权值的边便能使得拆除时所用的费用尽...原创 2020-02-22 18:03:24 · 309 阅读 · 0 评论 -
POJ 2970 The lazy programmer(优先队列)
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <string>#define inf 0x7fffffffusing namespace std;#defi...原创 2020-02-21 15:22:29 · 208 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers(线段树+区间修改,区间查询)
题意:给出一段序列,两种操作。Q L R :查询【L,R】区间之和C L R X :将【L,R】区间中的每个数增加X思路:线段树模板题:区间修改+区间查询lazy:懒标记特别之处:增加push_down()#include <iostream>#include <cstdio>#include <cstring>#include <s...原创 2020-02-21 12:39:38 · 189 阅读 · 1 评论 -
SGU 271 Book Pile(双端队列deque)
题意:有一堆书,两种操作。ADD:往顶部加入一本书ROTATE:翻转书堆顶部的前k本书思路:deque(双向队列)利用两个双向队列,q1储存前k个,q2储存超过k个的剩余部分。设置flag变量表示对待q1应该往前插入或是往后插入,q2都是往前插入。最后输出的时候还得看flag变量。#include <iostream>#include <algorithm&g...原创 2020-02-21 12:30:22 · 183 阅读 · 0 评论 -
CodeChef-ANDMIN Range Minimum Queries(线段树)
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>#define inf 0x7fffffffusing namespace std;int n,m,a[100005];struct no...原创 2020-02-21 12:05:10 · 138 阅读 · 0 评论 -
POJ 3264 Balanced Lineup(线段树+区间最值查询RMQ)
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>using namespace std;int n,m,a[50005];struct node{ int l,r,ma,mi;...原创 2020-02-21 11:40:39 · 151 阅读 · 0 评论 -
UVA 10608 Friends(并查集)
题意:A与B是朋友,B与C是朋友,那么A与C也是朋友,问一个朋友圈中最多有多少人。思路:并查集Find函数找自己归属队伍Union函数将x和y合并为一个队伍最好在通过遍历每个人,找出最大的朋友圈(队伍)。#include <iostream>#include <cstdio>#include <cstring>#include <strin...原创 2020-02-20 18:10:11 · 194 阅读 · 0 评论