![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
数据结构
VL——MOESR
ga
展开
-
【2022年11月14日提高A组】 吵架【线段树分治】
线段树分治原创 2022-11-14 19:19:46 · 107 阅读 · 0 评论 -
【2022年10月27日A组】生日【线段树】
线段树原创 2022-10-28 14:28:18 · 79 阅读 · 0 评论 -
【NOIP2022 模拟赛 B 组 Day5】选择人员【线段树】
线段树原创 2022-10-24 18:59:48 · 80 阅读 · 0 评论 -
【2022年10月18日A组】k进制【线段树】
线段树原创 2022-10-19 17:59:13 · 103 阅读 · 0 评论 -
【数据结构训练】区间交
线段树 + 贪心原创 2022-09-28 21:34:05 · 120 阅读 · 0 评论 -
【数据结构练习】玻璃切割
数据结构原创 2022-09-22 20:58:23 · 135 阅读 · 0 评论 -
【集训DAY4】矩形【线段树】
线段树原创 2022-08-08 19:50:50 · 89 阅读 · 0 评论 -
【SSL集训DAY2】Sort【树状数组】
树状数组原创 2022-08-06 16:21:10 · 68 阅读 · 0 评论 -
【集训DAY9】Maze【线段树】
线段树原创 2022-07-19 20:54:17 · 119 阅读 · 0 评论 -
【集训DAY6】Dream【优先队列】【贪心】
贪心+优先队列原创 2022-07-16 16:05:07 · 110 阅读 · 0 评论 -
【集训DAY5】【Luogu_P6339】[COCI2007-2008#2] TURBO && Sort 【树状数组】
树状数组原创 2022-07-15 19:56:29 · 108 阅读 · 0 评论 -
【Luogu_P4556】 [Vani有约会]雨天的尾巴 /【模板】线段树合并
合并线段树+树上差分原创 2022-07-12 21:42:01 · 126 阅读 · 0 评论 -
【YBTOJ进阶训练指导】交换序列【树状数组】
树状数组原创 2022-03-02 20:04:44 · 179 阅读 · 0 评论 -
【YBTOJ进阶训练指导】星星问题【树状数组】
树状数组原创 2022-03-02 19:51:50 · 160 阅读 · 0 评论 -
【YBTOJ进阶训练指导】家庭作业【堆】【贪心】
贪心+堆原创 2022-02-28 20:28:42 · 194 阅读 · 0 评论 -
【YBTOJ进阶训练指导】选数游戏【二叉堆】【贪心】
二叉堆+贪心原创 2022-02-28 20:08:34 · 3494 阅读 · 0 评论 -
【51nod_1275】连续子段的差异
题目描述思路:枚举左端点,每次右端点扩到不能再大,然后统计。优化就是每做完一次的队列保存到下次继续做codecodecode#include<iostream>#include<cstdio>using namespace std;long long n, k, hd, tl, hd1, tl1;long long a[101010], ans;long long q[101010], q1[101010];int main(){ scanf("原创 2022-01-16 18:57:22 · 101 阅读 · 0 评论 -
【SSL_2884】假期
思路:用单调队列,至于假期长度的处理只需要在到i时将i-p插入到队列就行了codecodecode#include<iostream>#include<cstdio>using namespace std;long long n, p, q, b[101010], ans=-1e18;long long a[1010101], q1[101010];int main(){ scanf("%lld%lld%lld", &n, &p, &a..原创 2022-01-15 10:12:45 · 486 阅读 · 0 评论 -
【51nod_1272】最大距离
题目描述思路:现将以大小排序,当前位置到离它最远位置用单调栈维护codecodecode#include<iostream>#include<cstdio>#include<algorithm> using namespace std;int n, ans, q[101010];struct node{ int x, id;}a[101010];bool cmp(node x, node y){ if(x.x!=y.x) r原创 2022-01-14 18:46:58 · 170 阅读 · 0 评论 -
【Luogu_UVA1619】Feel Good
题目描述思路:直接求出对于i为最小值时最大的答案,然后max就行了codecodecode#include<iostream>#include<cstdio>#include<cstring>using namespace std;long long n, a[101010], tl ,v[101010], ans[101010];long long ans1[101010], sum[101010];long long b[101010],原创 2022-01-14 15:13:53 · 144 阅读 · 0 评论 -
【51nod_2491】移调k位数字
题目描述思路:分析题目,发现就是要小数尽可能靠前,用单调栈来做codecodecode#include<iostream>#include<cstdio>using namespace std;int n, k, tl;string s;char st[1010101];int main(){ scanf("%d", &n); cin>>s; scanf("%d", &k); for(int i=0; i<n;原创 2022-01-14 08:09:35 · 153 阅读 · 0 评论 -
【51nod_1279】扔盘子
题目描述:思路:先用单调栈把不可能落到的地方全部裁掉,然后从下往上一一放就行了codecodecode#include<iostream>#include<cstdio>using namespace std;int n, m;int w[101000], d[101000];int tl;struct node{ int x, s;}st[101010];int main(){ scanf("%d%d", &n, &m);原创 2022-01-13 19:58:26 · 69 阅读 · 0 评论 -
【Luogu_CF817D】Imbalanced Array
题目传送题目描述对于给定由 n 个元素构成的数组。一个子数组的不平衡值是这个区间的最大值与最小值的差值。数组的不平衡值是它所有子数组的不平衡值的总和。以下是数组[1,4,1]不平衡值为9的例子,共有6个子序列:[1] (从第一号到第一号)不平衡值为 0;[1, 4] (从第一号到第二号), 不平衡值为 3;[1, 4, 1] (从第一号到第三号),不平衡值为 3;[4] (从第二号到第二号),不平衡值为 0;[4, 1] (从第二号到第三号),不平衡值为 3;[1] (从第三原创 2020-08-12 09:35:46 · 194 阅读 · 0 评论 -
【POJ_2559】Largest Rectangle in a Histogram
思路:我们可以用单调栈维护高从小到大,然后每次弹出的时候通过累加底的长度来求最大值codecodecode#include<iostream>#include<cstring>#include<cstdio>using namespace std;long long n, a[1010100];long long tl;struct node{ long long h, l;}st[1010100];int main(){ sca..原创 2022-01-13 10:19:44 · 126 阅读 · 0 评论 -
【Luogu_P2866】Bad Hair Day S
题目描述:思路:倒着跑单调栈codecodecode#include<iostream>#include<cstdio>using namespace std;long long n, ans[1010100];long long a[1001000], v[1001000];int main(){ scanf("%lld", &n); for(long long i=1; i<=n; i++) scanf("%lld", &am原创 2022-01-13 09:33:10 · 80 阅读 · 0 评论 -
【51nod_2500】后面第一个大于
题目描述思路:题目相当于就是让你找i后第一个大于它的数我们从后往做,维护单调栈,如果一个数比栈尾的数大,就把尾踢出,这样每次找到的第一个大于它的数就是i最小的codecodecode#include<iostream>#include<cstdio>using namespace std;int n, ans[1010100];int a[1001000], v[1001000];int main(){ scanf("%d", &n); f原创 2022-01-13 09:08:25 · 114 阅读 · 0 评论 -
【51nod_3111】小明爱拦截
题目描述思路:和这道题基本一样,只是编号倒过来而已codecodecode#include<iostream>#include<cstdio>#include<algorithm>using namespace std;long long n;long long c[201110], dp[201110];struct node{ long long x, id;}a[201110];bool cmp(node x, node y)原创 2022-01-12 21:06:52 · 88 阅读 · 0 评论 -
【SSL_1459】求最长不下降子序列
注!!!第三个数据点和题目描述不符合!!!思路:codecodecode#include<iostream>#include<cstdio>#include<algorithm>using namespace std;long long n;long long c[201110], dp[201110];struct node{ long long x, id;}a[201110];bool cmp(node x, node y).原创 2022-01-12 20:41:26 · 164 阅读 · 0 评论 -
【POJ_2352】Stars
题目描述思路:先按横坐标大小排序,然后通过纵坐标做树状数组就可以统计了codecodecode#include<iostream>#include<cstdio>#include<algorithm>using namespace std;long long n, c[1001000], ans[1001000];struct node{ long long x, y;}a[1001000];bool cmp(node x, node原创 2022-01-12 16:17:07 · 64 阅读 · 0 评论 -
【51nod_3122】小陶的疑惑2
题目描述思路:这道题用差分树状数组就可以解决codecodecode#include<iostream>#include<cstdio>using namespace std;long long n, m, a[1010010];long long c[1010101];long long lowbit(long long x){ return x&-x;} void add(long long x, long long y){ f原创 2022-01-12 16:12:58 · 167 阅读 · 0 评论 -
【51nod_3121】小陶与杠铃片
题目描述思路:我们可以由归并排序过程可得,每交换一次就消除一个逆序对,所以操作数就是逆序对个数这里用树状数组求,按照输入进来的顺序,用树状数组统计就可以了codecodecode#include<iostream>#include<cstdio>#include<algorithm>using namespace std;long long n, a[1010000];long long c[1010000];long long lowb原创 2022-01-12 16:04:31 · 160 阅读 · 0 评论 -
【51nod_3120】小陶的疑惑
题目描述思路:树状数组模板题codecodecode#include<iostream>#include<cstdio>using namespace std;long long a[1010000], c[1000100];long long n, m;long long lowbit(long long x){ return x&-x;}void add(long long x, long long y){ for(; x<原创 2022-01-12 16:00:19 · 178 阅读 · 0 评论 -
【2021年10月6日提高B组】大哥扛纵连
思路:70points做法直接预处理暴力前缀和mn统计codecodecode#include<iostream>#include<cstdio>#include<cmath>using namespace std;long long n, m;long long a[10100], f[10100][20];long long sum[2021][2021];int main(){ scanf("%lld%lld", &n,..原创 2021-10-06 16:40:03 · 71 阅读 · 0 评论 -
【YBTOJ】字符串排序
思路:我们不妨设26个线段树表示当前节点上有没有这个字母。然后在做时首先把每个字母在区间的个数选出来然后从小到大(或从大到小)依次插入codecodecode#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n, m;char c[100010];int tmp[27], f[400010];struct node{ int x;}a..原创 2021-06-13 08:32:29 · 128 阅读 · 0 评论 -
【YBTOJ】维护序列
参考线段树2codecodecode#include<iostream>#include<cstdio>using namespace std;long long n , P, m;struct node{ long long l, r, w, flag1, flag2;}a[4001000];void build(long long k, long long l, long long r){ a[k].l=l, a[k].r=r; a[k].fla.原创 2021-06-12 10:47:07 · 96 阅读 · 0 评论 -
【YBTOJ】小白逛公园
思路:我们对线段树每个节点维护几个信息:区间和,区间最大子段和,从左端点开始的最大和and右端点开始的,c1表示父节点,那么c1.sum=a1.sum+b1.sum;c1.lmax=max(a1.lmax, a1.sum+b1.lmax);c1.rmax=max(b1.rmax, b1.sum+a1.rmax);c1.maxx=max(a1.maxx, max(a1.rmax+b1.lmax, b1.maxx));codecodecode#include<iostream>..原创 2021-06-11 21:11:16 · 82 阅读 · 0 评论 -
【YBTOJ】区间查改
思路:线段树模板题codecodecode#include<iostream>#include<cstdio>using namespace std;long long n, m;struct node{ long long l, r, sum, flag;}tree[4001000];void build(long long k, long long l, long long r){ tree[k].l=l, tree[k].r=r; if(..原创 2021-06-03 16:09:26 · 85 阅读 · 0 评论 -
【YBTOJ】求区间和
思路:线段树模板codecodecode#include<iostream>#include<cstdio>using namespace std;long long n, m;struct node{ long long sum;}tree[100100*4];void change(long long k, long long l, long long r, long long x, long long v){ if(l==r&&am..原创 2021-06-02 17:31:27 · 116 阅读 · 0 评论 -
【YBTOJ】区间修改区间查询2
思路:和一维区间修改区间查询一样,用二维树状数组做,式子就是:∑i=1n∑j=1ma[i]=∑i=1n∑j=1m∑k=1i∑h=1jdi,j\sum_{i=1}^{n}\sum_{j=1}^{m}a[i]=\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{k=1}^{i}\sum_{h=1}^{j}d_{i,j}i=1∑nj=1∑ma[i]=i=1∑nj=1∑mk=1∑ih=1∑jdi,j分别用4个树状数组维护即可...原创 2021-05-22 15:03:36 · 68 阅读 · 0 评论 -
【YBTOJ】单点修改区间查询2
思路:二维树状数组codecodecode#include<iostream>#include<cstdio>#include<cstring>using namespace std;long long n, m;long long c[5000][5000];long long lowbit(long long x){return x & -x;}void add(long long x, long long y, long ..原创 2021-05-22 11:22:27 · 56 阅读 · 0 评论