线段树是学不明白了…… 部分指针用法 对于这段代码, struct Node{ int a, b, c; }YJH[100], x; Node *p = YJH, *q = &x; 以下代码在使用过程中是等价的: cout << x.a << endl; cout << q->a << endl; ...
分类:
其他好文 时间:
2020-07-18 00:55:56
阅读次数:
106
首先先让我们认识离散化用的函数,STL给我们提供了便利: unique(start,end);//取出有序序列重复元素,左闭右开,返回去重复序列最后一个元素位置 lower_bound(start,end,key);//左闭右开中寻找第一个大等于key的数,返回值 std::sort(a+1,a+n ...
分类:
其他好文 时间:
2020-07-17 22:24:59
阅读次数:
82
昨天突然脑袋比较清醒,好像似乎以前没有搞太懂的可持久化线段树一下子就搞懂了,结果打了几遍还是出现了一些意想不到的问题,下面我就来整理一下,防止以后重蹈覆辙! 下面我放一个50分的代码: #include<bits/stdc++.h> #define LL long long using namesp ...
分类:
其他好文 时间:
2020-07-17 13:57:31
阅读次数:
57
最近线段树打的我非常的难受,特别是含有Pushdown的那种,打一个错一个,还不如打暴力拿一些基础分。所以说我特意请教了大佬,然后我发现其实自己的线段树一直都是有一些问题的,下面我就来介绍一下如何用正确的姿势来打线段树保证以后打线段树都不会错!!! 首先为了不打错,我们首先要对Pushdown这个东 ...
分类:
其他好文 时间:
2020-07-17 13:55:56
阅读次数:
65
题目描述(口糊) 先给定一个长度为n的数列,然后给m次操作,每次输入b,求第b小的数。 样例输入 5 7 4 10 9 23 5 1 2 3 4 5 样例输出 4 7 9 10 23 数据范围及温馨提示 1e9 大家一定要用线段树做这道题啊! 建议大家在认真阅读一下逆序对的题解 题解传送门 于是这里 ...
分类:
其他好文 时间:
2020-07-17 13:36:55
阅读次数:
49
1.区间求和 2.区间取模 3.单点修改 线段树,区间取模加一个剪枝:区间最大值<mod,不修改。其他单点取模 #include <bits/stdc++.h> using namespace std; #define debug printf("bug!!!\n"); typedef long l ...
分类:
其他好文 时间:
2020-07-16 11:50:06
阅读次数:
63
一个数最多能取8-9次根号。 #include <bits/stdc++.h> using namespace std; #define debug printf("bug!!!\n"); typedef long long ll; const int MAXN=1e5+10; const ll M ...
分类:
其他好文 时间:
2020-07-16 10:11:53
阅读次数:
74
主要讲一下状数组的建立和逆序对的求解方法 树状数组: 修改和查询的复杂度均为$O(\log n)$相比线段树的系数要少很多。 采用了二进制的方法建树,仅有左儿子而无右儿子. 建树过程: void update(int x,int y){//给x位置加上y while(x<=n){ d[x]+=y;x ...
分类:
编程语言 时间:
2020-07-15 22:44:24
阅读次数:
64
题目链接:http://poj.org/problem?id=2482 给出每个点框定的区域,求区域叠加的最大值,可以通过如下算法: 将每个可行点都标记,记录这些点上的权值,维护一个叶结点是一个权值点的线段树,更新的时候注意,由于所有的点都是可行点,所以右边界要在最后删除,遇到同样的x坐标的,优先叠 ...
分类:
编程语言 时间:
2020-07-15 15:23:49
阅读次数:
68
2017种树 题目描述 2017共有N棵树从0到N-1标号。现要把这些树种在一条直线上,第i棵树的种植位置X[i]如下确定: X[0] = X[0] MOD L; X[i] = (X[i-1]*A+B) MOD L。 每棵树种植的费用,是所有标号比它小的树与它的距离之和。2017请你计算各棵树的费用 ...
分类:
其他好文 时间:
2020-07-14 19:58:09
阅读次数:
60