
区间算法技巧
文章平均质量分 73
henuzxy
已经成为刷题过千的男人,即将成为cf 1900分的男人。
展开
-
区间更新,单点查询的两种做法(树状数组和差分)
差分差分是一种和前缀和相对的策略,可以当做是求和的逆运算。定义为:f(n)={ai−ai−1,n>2ai,n=1f(n) =\begin{cases} a_i - a_{i-1}, &n>2\\a_i, &n = 1 \end{cases}f(n)={ai−ai−1,ai,n>2n=1它具有一下这些性质:bi的前缀和是ai的值。若在序列a的[l,r]区间增加一个数d,对b的表现为在b[l] +d,b[r+1]-d。(通过这个性质可以实现区间原创 2020-12-01 00:45:20 · 1215 阅读 · 0 评论 -
RMQ的两种实现ST算法,和线段树
RMQ就是一种nlog实现的区间查询最值得一种东西。 就是先划分区间,对于每一个节点存储其左右区间范围,和区间最值,我是用结构体来实现。用线段树的方法。可以参看下这个视频 https://www.bilibili.com/video/av9350697/?from=search&seid=16954174042578847354里面讲解了线段树的实现。我们参看NYOJ 119的这个例题 链原创 2017-07-07 13:33:15 · 1168 阅读 · 1 评论 -
leetcode 995. K 连续位的最小翻转次数 (区间更新,单点查询)
在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。返回所需的 K 位翻转的次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。示例 1:输入:A = [0,1,0], K = 1输出:2解释:先翻转 A[0],然后翻转 A[2]。示例 2:输入:A = [1,1,0],...原创 2019-07-30 21:27:35 · 528 阅读 · 0 评论 -
URAL - 1989 Subpalindromes (单点修改,查询某个区间子串是否为回文串) (线段树+哈希)
链接You have a string and queries of two types: replace i’th character of the string by character a; check if substring sj…sk is a palindrome. Input The first line contains a string consisting of ...原创 2018-08-06 11:49:07 · 696 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第三场) C Shuffle Cards (Splay伸展树,rope 可持续化平衡树)
链接 链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 Eddy likes to play cards game since there ...原创 2018-07-26 21:37:27 · 391 阅读 · 0 评论 -
对于先区间更改,再单点查询题目 的一种算法 HDU 6273 Master of GCD & NYOJ 228
这两个题目都是先进行区间的修改最后再查询,就是对某个区间乘上一个数,或者是对某个区间加上一个数。最后再询问区间。以前我做这种题目总是会想到区间修改的线段树,当然这种方法对于大部分题目也确实可行,不过线段段树解决的应该是在边修改边询问的,就是让你自己判断这个操作是修改还是询问。这种是需要线段树来解决的,而对于先修改,最后再询问的题目。比如对[l,r]这个区间加上个C,我们可以这样吧 a[l] +...原创 2018-07-26 08:48:28 · 391 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第二场)J farm (二维区间更新,单点查询 + 哈希)
链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 White Rabbit has a rectangular farmland of n*m. In each of th...原创 2018-07-23 13:32:41 · 548 阅读 · 0 评论 -
HDU 5701 中位数计数(思维,区间)好题
Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数。现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数。Input 多组测试数据第一行一个数n(n≤8000)第二行n个数,0≤每个数≤109,Output N个数,依次表示第i个数在多少包含其的区间中是中位数。Sample原创 2017-11-10 14:52:17 · 934 阅读 · 0 评论 -
HDU 6205 card card card && 沈阳网络赛1012 (尺取法)
Problem Description As a fan of Doudizhu, WYJ likes collecting playing cards very much. One day, MJF takes a stack of cards and talks to him: let’s play a game and if you win, you can get all these原创 2017-09-14 00:06:34 · 305 阅读 · 0 评论 -
Haut 1282: ykc想吃好吃的(最大连续子段和,首尾相连)
题目链接 http://218.28.220.249:50015/JudgeOnline/problem.php?id=1282题目描述一天,ykc在学校闲的无聊,于是决定上街买点吃的,ykc很懒,本来就不是很像逛街,于是找来了czl帮他买,这里应该有滑稽,而czl也不愿为ykc买东西吃,但是ykc很强势,非让他去买,呢没办法了,然而czl还有很多事要做,没呢么多时间帮ykc,而这条小吃街又很长,有原创 2017-08-06 17:45:13 · 497 阅读 · 0 评论 -
树状数组的单点更新,区间查询。
基本的数组数组概念,树状数组利用其特殊的位置可以用二进制达到log级别的更新,如下图 核心代码int sum(int i){ int s = 0; while(i > 0){ s += dat[i]; i -= i&-i; } return s;}void add(int i,int x){ while(i <= n){原创 2017-07-21 17:05:11 · 898 阅读 · 0 评论 -
POJ-3320 Jessica's Reading Problem(求最小区间,尺取法)
DescriptionJessica’s a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is coming, yet she has spent little time on it. If she wants to pass it, she has to master all原创 2017-05-22 18:49:55 · 349 阅读 · 0 评论 -
HDU-2668(Daydream) 求最长的不重复子串
Problem Description Welcome to 2009 HDU Girl’s Cup, bless you will happy in it. Every girl are beautiful if you use you heart to feel. Every corner in the world will colourful and energetic by severa原创 2017-04-19 22:49:26 · 636 阅读 · 0 评论 -
POJ-3061 Subsequence(维护一个区间)
DescriptionA sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) are given. Write a program to find the minimal length原创 2017-05-20 17:02:17 · 385 阅读 · 0 评论