首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

线段模板

概述:线段是算法竞赛中常用的数据结构(虽然考场中很少用,毕竟调起来麻烦,区间求和用树状组还是更加方便代码也短)。...线段可以在O(logN)的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区间最大值,求区间最小值)等操作。...简略的描述一下算法思路,线段是一个二叉的每一个节点存储的都是一个区间内的值(根据具体的题目而定),每个父结点的值由两个子结点的值决定。...但是普通的二分思想并不能体现线段的精髓所在,线段的精髓就在于它的懒标记,具体往下看。算法的实现://建议初学者先看无懒标记版,在最下面。...N的大小void build(int l,int r,int tr){t[tr].l=l;t[tr].r=r;if(l==r) {t[tr].sum=a[l];return;} //如果区间内只有一个

25020

线段模板与练习

文章目录 思想 核心函数 存储方式 模板:动态求连续区间和 练习:数列区间最大值 应用:求区间最大值,求染色面积,长度,最大连续和等等。...核心函数 pushup:用子节点信息更新当前节点信息 build:在一段区间上初始化线段 modify:修改 query:查询 (此外,懒标记会有pushdown) 存储方式 线段数组的存储方式与堆(...x << 1 | 1 关于数组存储的空间问题:最理想情况是 N+\frac{N}{2}+\frac{N}{4}+…=2N−1 ,一般情况下最后一层节点不是满的,但最坏情况也不会超过前面整个二叉的节点总数...模板:动态求连续区间和 给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b] 的连续和。 输入格式 第一行包含两个整数 n 和 m,分别表示数的个数和操作次数。...tr[u].l >= l && tr[u].r <= r) return tr[u].maxv; int mid = tr[u].l + tr[u].r >> 1; // 注意这里的中点一定是的中点

58730

Trie模板与应用

Trie(字典) Trie是用来快速存储和查找 字符串集合的数据结构。某个字符串集合对应的有根。...的每条边上对应有恰好一个字符,每个顶点代表从根到该节点的路径所对应的字符串(将所有经过的边上的字符按顺序连接起来)。...利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希高。...Trie中有个二维数组 son[N][26],表示当前结点的儿子,如果没有的话,可以等于++idx。Trie本质上是一颗多叉,对于字母而言最多有26个子结点。所以这个数组包含了两条信息。...参考:https://www.acwing.com/solution/content/5673/ 模板总结 int son[N][26], cnt[N], idx; // 0号点既是根节点,又是空节点

22430
领券