算法
文章平均质量分 54
洛杉矶的良民
这个作者很懒,什么都没留下…
展开
-
栈 队列 KMP
栈 先进后出 int tt; int st[N]; int x; cin >> x; //进栈 st[ ++ tt] = x; //弹出 t --; //输出栈顶元素 cout << st[tt] ; //判空 if(tt > 0) not empty; else empty; 830.单调栈 #include<iostream> using namespace std; const int N = 1010; int n; int T[N], tt; i原创 2021-05-10 22:48:07 · 80 阅读 · 0 评论 -
双指针 离散化 位运算
双指针 核心思想 利用朴素算法的单调性,将O(n^2)优化到O(n)。 算法模板 for(int i = 0, j = 0; i < n; i ++) { while(check(i, j)) { ... j ++; } } 离散化(整数) 离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。 例如: 原数据:1,999,100000,15;处理后:1,3,4,2; 原数据:{100,200}原创 2021-05-04 15:27:12 · 92 阅读 · 0 评论 -
前缀和与差分
前缀和与差分 前缀和 前缀和的应用 在一维数组中: 比如说吧,当输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。 我们很容易想出暴力解法,遍历区间求和。 int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); while(m--) { int l,r; int sum=0; scanf原创 2021-01-24 18:30:33 · 184 阅读 · 0 评论 -
快排 归并 二分
快排 分治 算法思想 1.确定分界点x。 2.将比x小的数放在x的右边,比x大的放在x的左边。 3.递归处理左右两段。 例题 Acwing 785.快速排序 #include<iostream> using namespace std; const int N = 1e6 + 10; int n; int q[N]; void quick_sort(int q[], int l, int r) { if(l >= r) return; int x = q[l], i = l -原创 2021-04-24 00:47:26 · 106 阅读 · 0 评论 -
高精度算法
高精度 加法 算法思想 1.逆序储存,方便进位。 2.位相加时用t记录,方便判断位上是否有数,方便进位处理。 #include<iostream> #include<vector> using namespace std; vector<int> add(vector<int> &A, vector<int> &B) { vector<int> C; int t = 0; for(int i = 0; i <原创 2021-04-25 18:19:15 · 143 阅读 · 1 评论