线段树
VVVLeHr
这个作者很懒,什么都没留下…
展开
-
HDU - 3974 Assign the task DFS括号引理+线段树
原题目链接 题意是给你一棵树,然后有两类操作,一种是将某个节点以及它所有的子孙修改成某个数,另一种是查询该节点的值。所有节点的初始值为-1; 思路 说实话不好联想到线段树上来,如果用暴力修改每棵子树的话每次修改的复杂度都可以达到O(n),不过我当时想到可以另外建立一棵结构相同的懒惰标记的树。但是复杂度并没有变化。 在学习图论的时候学DFS生成树的时候有一个叫做括号引理的结论。对于每个节点u,设d...原创 2020-03-20 13:22:13 · 380 阅读 · 0 评论 -
HDU 1394 暴力 或 归并排序 或 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394题意:给定n个数,一个合法操作是每次可以将数列的第一个元素放到数列的尾部,然后问你所有可能操作中的逆序对的个数最少是多少。一个逆序对(ai,aj)的定义是数列a中下标 i 小于 j 同时 ai 大于 aj。思路:看到数据范围只有5000,一开始就往暴力方面想了。然后模拟一下发现了一个比简单的规律。原创 2017-09-27 21:07:26 · 305 阅读 · 0 评论 -
POJ 2828 线段树
题目链接:http://poj.org/problem?id=2828题意:队列问题,每个人会插入一个位置,每个人有固定id,即val。输出最后队列。思路:这道题如果正着想会比较难,但是如果考虑从数据末往会考虑就可以发现这个时候序列就已经是固定了的。现在难得就是怎么构建线段树了。考虑每个叶子节点存储一个标志位标志这个位置有没有人,往上的节点存储它的两个儿子中可以放人的个数。查询的时候,如果当前节点p原创 2017-09-30 22:15:48 · 200 阅读 · 0 评论 -
POJ2886 Who Gets the Most Candies? 线段树+预处理
题目链接:http://poj.org/problem?id=2886题意:n个孩子围成一圈,顺时针编号,每个孩子有一个名字和一个非零数字,指定从第k个孩子开始,每次使被抽到的孩子的号码a上对应的孩子退出去,如果数字是正的,那么就从这个孩子的左手边第a个孩子退出去,负数就从右边开始数。计算他们的推出序号p,求使得p的因子个数最大的孩子的名字,以及这个p的因子个数。思路:也是人数题,单点更新,和之前的原创 2017-10-02 23:40:39 · 286 阅读 · 0 评论 -
HDU 1754 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754题意:给你n个数,m个操作,Q A B代表询问区间[A,B]的最大值,U A B代表更新A点的值为B。思路:也是个简单的单节点更新的线段树,没有啥难度,但是在输入的时候被坑了一下,记得要getchar()掉回车,否则EOF没有用。#include <iostream> #include <stdio原创 2017-09-27 19:22:50 · 236 阅读 · 0 评论 -
HDU1166 线段树 或 树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166题意:给定一个区间长度,三种操作,ADD i, j是将id为i的位置的值增加j;SUB i,j是将id为i 的位置的值减j;QUERY i,j为查询闭区间i,j的和。很经典的线段树单点修改和区间和查询。#include <iostream> #include <stdio.h> #include <原创 2017-09-25 21:39:18 · 236 阅读 · 0 评论 -
HDU-1698 Just a Hook 线段树区间更新
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698题意:一个长度为n的线段,q个操作,每个操作x,y,z是指把区间[x,y]内的值修改为z,最后求线段值的和。思路:增加懒惰标志,每次更新操作只更新到这个区间节点而不是这个区间的所有叶子结点。例如操作1,5,2。只更新到节点[1,5]而不是他的五个叶子结点。这个时候会把节点[1,5]节点标志为2,如果原创 2017-10-03 20:03:07 · 382 阅读 · 0 评论