线段树
文章平均质量分 85
Willona_C
这个作者很懒,什么都没留下…
展开
-
CodeForces 115E Linear Kingdom Races(线段树 + DP)
题意:有n条赛道,m场比赛,比赛需要占用若干条赛道,在举行比赛之前需要修理赛道,利润 = 举办比赛获利 - 修理赛道的费用,当然可以选择不举办某几场比赛,求最大利润。先将所有比赛所要占用的赛道区间按右端从小到大排序,dp[i]表示前i场比赛可得的最大利润。若第i场比赛的赛道区间为[l, r],则影响利润的一定是l之前的赛道,所以第l - 1条及其之前的赛道都要加上第i场比赛的利润,若要修理第i原创 2015-08-05 22:53:02 · 1017 阅读 · 0 评论 -
hdu4638 Group(离线线段树)
题意:n个人,序号为1到n,将他们分尽可能少的组数,要求同组的人序号排序后是连续的。m次询问,求问询问的区间中的人至少可分成几组。先将所有询问按右端点排序。将n个人依次存入线段树,当第i个人、序号为x的人加入线段树时,将其认为是独立的一组,则第i个结点的sum值加1,若序号为x - 1 或x + 1的人位置在他前面,则组数可以少1或2,则序号为x - 1 或x + 1的人所在位置所对应的结点s原创 2015-08-05 23:05:19 · 533 阅读 · 0 评论 -
CodeForces 46D Parking Pot(线段树区间更新)
题意:一段线性的停车场,长度为L,停车时从零点坐标开始停,要求保证新停入的车前后间距分别为f,b(在停车场的边缘不考虑车前间距或车后间距)。有n次操作,1 a表示停入一辆长度为a的车,要求输出车尾的坐标,2 a表示第a次操作中的那辆车移出停车场(注意:第a次操作不是以1开头的操作中的第a个,因为看错这个,我不停的RE......)。明显的线段树区间更新,因为之前做过一道类似的题,保存了模板,所原创 2015-08-05 22:33:04 · 611 阅读 · 0 评论 -
CodeForces 85D Sum of Medians(线段树 + 离散化)
题意:n次操作,有三种操作:加入一个集合中没有的数,删除一个集合中已有的数,求集合中位置模5余3的数之和(集合自动从小到大排序)。因为操作最多是1e5次,但是数的范围最大到1e9,所以要采用离散化。线段树中每个结点有一个长度为5的数组,来记录模5的余数,还有一个m数组,若在第i个位置插入或删除一个数,则该位置后面的每个结点的m都要加1或者是减1,来记录该结点位置模5后余数的变化。这道题敲了原创 2015-08-05 23:22:11 · 998 阅读 · 0 评论 -
poj2886 Who Gets the Most Candies?(反素数 + 线段树)
题意:n个孩子坐一圈,依次跳出圈子,跳出的孩子手中卡片上的数值v[i]表示他左手边(顺时针数)第v[i]个孩子跳出圈子。第p个跳出圈子的孩子得到的糖数等于p约数的个数,求问拿糖最多的孩子的名字和糖数。这道题可以转化为求出1~n中约数个数最多的数p,并且求出第p个跳出圈子的孩子原本的位置。因为敲这道题的关系,我发现了一个很神奇的东西,叫作“反素数”。以我的语文水平还不能完全清楚的表达反素数的原创 2015-07-27 16:22:20 · 444 阅读 · 0 评论 -
poj2828 Buy Tickets (线段树)
题意:插队买车票,求最后排队次序。从后往前想数组中插入,输入的两个数a[i],v[i]分别表示插入v[i]的位置前还有a[i]个空位。用线段树记录区间中的空位个数,每输入一次找到应在的位置,赋值并更新树。函数名正常应该是update的,敲题的时候觉得是在查询v[i]在数组中的位置,就写了query......现在越看越怪异#include #include #include原创 2015-07-27 15:04:36 · 379 阅读 · 0 评论 -
CodeForces 296C Greg and Array (线段树)
题意:长度为n的序列;m种操作:a b c表示第a~b个数的值加上c;k次执行:a b表示执行第a~b种操作。最后输出执行完所有操作后的数列。先用线段树计算出每种操作执行的次数,将操作中要加的数乘以次数更新。再用线段树求出每个位置的数需要加的最终数值。感觉两个都是简单线段树,就习惯性套模板,而且两个线段树又是先后分开执行,所以写了一个线段树就够了。#include #include #原创 2015-07-27 16:53:12 · 912 阅读 · 0 评论