线段树
LowestJN
强省弱OIer
展开
-
[主席树] Codeforces 840D .Destiny
%%%Vectorxj 设答案为p=r−l+1kp={r-l+1\over k },如果把区间元素排序,那么答案一定是第p个、第2p个…第kp个元素中的一个。 因为答案出现次数大于p,一定会跨越一个边界,所以以上结论成立 那么就在主席树上二分出这些数,找出最小的满足条件的就可以了#include <cstdio>#include <iostream>#include <algorithm>原创 2017-08-20 17:18:33 · 1285 阅读 · 0 评论 -
[线段树维护BITSET] NOI2017 .Day1 T1 整数
把数转换成二进制维护 那么进位就是把之后一段连续1变成0,后面的0变成1 退位就是把之后一段连续的0变成1,后面的1变成0 这样可以用线段树维护 有一个nlog2nn\log^2n的暴力,就是把这个数的每一个为1的位取出来,用线段树加进去,a为负的同理如果把原来的01序列压位一下(我压了30位),那么a最多跨2个30位整数,把这两位取出来,拼成一个60位整数,然后把加上去,因为最多进(退)一原创 2017-07-24 12:06:28 · 1821 阅读 · 0 评论 -
[线段树 || 主席树][Hash] HackerRank 101 Hack 49. Sorting Lists
传送门这题有两种做法考场上写了逐位确定的方法,但是没时间调了就交了暴力…先考虑区间1,如果里面不同的方案数小于k,那么任何一个1为前缀的序列都不是答案,否则1一定是答案的前缀,然后考虑2…可以用hash判重来记录一个区间里的方案数。#include <cstdio>#include <iostream>#include <algorithm>#include <ctime>#include原创 2017-07-08 21:15:53 · 532 阅读 · 0 评论 -
[线段树][单调栈]HackerRank 101 Hack 50 .Boxes for Toys
传送门首先可以发现,将三元组排序,一个区间里的maxa∗maxb∗maxcmax_a*max_b*max_c即是这个区间的权值。考虑枚举右端点rr,用线段树维护每个ii,i∈[1,r]i\in [1,r],ii到rr中maxa∗maxb∗maxcmax_a*max_b*max_c的值,这样用单调栈维护a,b,ca,b,c,退栈入栈分别用区间除,区间乘更新#include <cstdio>#incl原创 2017-07-08 21:02:07 · 455 阅读 · 0 评论 -
[模拟][线段树]Codeforces Round #424. B Cards Sorting
直接按照题意模拟找最小值用线段树找就可以了#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#include <map>#include <set>#include <cmath>#define fi first#define se second#define pb push_backu原创 2017-07-16 17:08:34 · 566 阅读 · 0 评论 -
[线段树] [二分图] Codeforces VK Cup 2015 - Round 2 A. Berland Miners
首先把木棒按长度排序。 找找规律可以发现每个节点都会覆盖一个区间,而这个区间是一个前缀, 再找找规律发现,序列中第i个木棒被覆盖至少i次就会存在解(可以用霍尔定理证明),那么就可以线段树乱搞了。找出最右边的没有满足条件的木棒,增加的长度就至少是这个木棒的长度减去这个节点到根路径的最小值。用线段树乱搞一下就好了考场上多写了个二分,多了个log……就被卡成40分#include <cstdio>#原创 2017-07-06 21:21:03 · 619 阅读 · 0 评论 -
[AtCoder ARC076 .F] [二分图] [霍尔定理] Exhausted?
注意到这个模型可以转化成二分图 根据霍尔定理,对于任意S∈US\in U,都要满足S≥N(S)S\ge N(S),其中UU是全集,N(S)N(S)是与SS相连的点组成的集合。 因为N(S)N(S)都是一些在左边,一些在右边的形式,所以只要枚举一下N(S)N(S),用线段树维护一下|S||S|的最大值就可以了。#include <cstdio>#include <iostream>#inclu原创 2017-07-02 18:10:08 · 1736 阅读 · 3 评论 -
[线段树][二分图 霍尔定理]LOJ#6062 && 2017 山东一轮集训 Day2. Pair
刚做过一道类似的题因为题目要求连续子序列,但是只要这个连续子序列和b序列两两对应,这就可以转化成一个二分图的模型。把b序列排序,一个ai就可以和b的一个后缀相连,可以看成一个覆盖某个后缀的线段,根据霍尔定理,排序后,bi至少要被i条线段覆盖,用线段树维护一下就可以了#include <iostream>#include <cstdio>#include <algorithm>using name原创 2017-07-11 17:43:27 · 949 阅读 · 0 评论 -
[线段树][矩乘][DP]Codeforces Round 573D && RussianCodeCup Thanks-Round .Bear and Cavalry
首先可以证明把两个数列从小到大排列再对应匹配是最优的。 画画图可以发现,在有限制的情况下一个点,离它匹配的点的距离不超过2 这样就可以DP了 fif_i表示前i个点匹配的答案。 那么fi=max fi−1+ai∗bifi−2+ai∗bi−1+ai−1∗bifi−3+ai∗bi−1+ai−1∗bi−2+ai−2∗bifi−3+ai∗bi−2+ai−1∗bi+ai−2∗bi−原创 2017-07-11 17:31:10 · 549 阅读 · 0 评论 -
[BZOJ4105][Thu Summer Camp 2015]平方运算
题意给定一个数列,有两种操作,询问一段区间[l,r][l,r]内的和或者对于i∈[l,r]i\in[l,r]的xi=xi 2%px_i=x_i~^2\%p类似于[bzoj3038]上帝造题的七分钟的思想因为存在取模,所以xix_i变成xi 2%px_i~^2\%p一定会存在循环,又因为p给的比较特殊,循环的大小也比较小,所以可以对于处在循环中的数打标记,不处在循环中的数暴力。#include <cs原创 2017-01-03 19:33:49 · 1337 阅读 · 0 评论