
数据结构
秘制函数
记录学习算法的过程
展开
-
AcWing 154. 滑动窗口(单调队列)
思路:先求滑动窗口的最小值,对暴力做法进行优化,用一个队列维护滑动窗口,如果某个窗口内的某个位置 i 的值比前面的元素小,那么在这个窗口和后面的窗口中 i 前面的元素一定是不会被输出的,就可以删掉,这样得到的队列一定是单调递增的,队头为最小值。如果队头元素的位置超出窗口的范围要对队列进行删减。因为在一个窗口中最小元素的位置是不确定的,所以队列要存储元素的位置#include<bits/stdc++.h>using namespace std;const int N=10000原创 2022-04-22 17:15:52 · 515 阅读 · 0 评论 -
AcWing 830. 单调栈(单调栈)
#include<bits/stdc++.h>using namespace std;const int N=100010;int stk[N],tt;int main(){ ios::sync_with_stdio(0); cin.tie(0); int n; cin>>n; for(int i=1;i<=n;i++){ int x; cin>>x; while(tt>0&&stk[tt]>=x){.原创 2022-04-15 09:23:15 · 117 阅读 · 0 评论 -
AcWing 3302. 表达式求值(栈)
#include<bits/stdc++.h>using namespace std;unordered_map<char,int> you={{'+',1},{'-',1},{'*',2},{'/',2}};stack<int> s1;stack<char> s2;void f(){ int re=0; int a=s1.top(); s1.pop(); int b=s1.top(); s1.pop(); char c=s2.to.原创 2022-04-14 17:01:03 · 181 阅读 · 0 评论 -
AcWing 837. 连通块中点的数量(并查集)
#include<bits/stdc++.h>using namespace std;const int N=100010;int p[N],sizee[N];int findd(int x){//路径压缩 if(p[x]!=x){ p[x]=findd(p[x]); } return p[x];}int main(){ ios::sync_with_stdio(0); cin.tie(0); int n,m; cin>>n>>m;.原创 2022-04-13 15:27:39 · 167 阅读 · 0 评论 -
AcWing 836. 合并集合(并查集)
作用:高效的合并两个集合和查询两个元素是否在同一个集合,时间复杂度近O(1);原理:每个集合用一颗树来表示,树根的编号就是整个集合的编号,每个节点存储他的父节点。#include<bits/stdc++.h>using namespace std;const int N=100010;int p[N];int findd(int x){ while(p[x]!=x){ x=p[x]; } return x;}int main(){ ios::sync_wi原创 2022-04-13 10:28:09 · 153 阅读 · 0 评论 -
c++常用容器的常见用法(积累中...)
vector访问最后一个元素:.rbegin() .end()-1 .back()原创 2022-03-18 21:11:00 · 1162 阅读 · 0 评论 -
AcWing 143. 最大异或对(trie+贪心)
#include<bits/stdc++.h>using namespace std;const int N=100010,M=N*31;int son[M][2],idx,a[N];void add(int x){ int p=0; for(int i=30;i>=0;i--){ int t=x>>i&1; if(!son[p][t]){ son[p][t]=++idx; } p=son[p][t]; }}int sea.原创 2022-04-12 10:31:16 · 111 阅读 · 0 评论 -
AcWing 835. Trie字符串统计(trie树)
一种可以高效地存储和查询字符串的数据结构#include<bits/stdc++.h>using namespace std;const int N=20010;int sinn[N][100],cnt[N],idx;void add(string s){ int p=0; for(int i=0;i<s.size();i++){ int t=s[i]-48; if(!sinn[p][t]){ sinn[p][t]=++idx; } p=sin.原创 2022-04-11 22:02:10 · 420 阅读 · 0 评论