
算法
文章平均质量分 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 · 121 阅读 · 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 · 123 阅读 · 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 · 216 阅读 · 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 · 139 阅读 · 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 · 220 阅读 · 1 评论