- 博客(13)
- 资源 (3)
- 收藏
- 关注
原创 HDU 4046 Panda (分块 或 线段树区间合并)
题面挺美的 题意:给出一个字符串,两种操作1.询问区间[l,r]内wbw有多少个(可重叠)2.将位置x的字符改为c 题解:分块和线段树都可以搞,分块很好解释,只需要单独处理边界问题。线段树区间合并需要将每次询问的区间拿出来单独处理一次。分块:#include<cstring>#include<string>#include<iostream>#include<queue>#include
2016-10-31 22:52:43 396
原创 HDU 4777 Rabbit Kingdom(离线树状数组 预处理)
题意:询问区间内与其它数不互质的数有多少个 题解:看了众多大牛的博客才懂这题怎么写(我好菜啊) 对于每一次询问,如果知道了这个数的左边不互质区间和右边不互质区间,那么就能通过离线之后加加减减的方法得到答案。 1.不互质区间处理:对于整个序列,从左扫一遍,再从右扫一遍,扫的时候记录每个数的素因子出现的位置,不断更新素因子位置得到每个数的不互质区间L,RL,R; 2.离线处理答案:对于所有询问离
2016-10-30 17:41:06 348
原创 HihoCoder 1233 Boxes(bfs打表)
题意:给出一列箱子,小箱子只能往大箱子上面放,问最少需要多少步使箱子严格升序排列题解: 离散化大小之后得到7种箱子,那么状态总数最多777^7种,直接预处理所有情况打表,由于每一个箱子都有唯一的坐标,直接以此为关键值得到一个十进制整数作为当前状态存储访问标记和答案。#include<cstring>#include<string>#include<iostream>#include<queu
2016-10-27 23:35:42 348
原创 CodeForces 551E GukiZ and GukiZiana (分块)
题意: 给出一个序列,两种操作 1.将区间[l,r]上的数加x 2.询问满足a[i]=x的下标中下标最大距离,即找到序列右边值等于x的下标和左边等于x的下标,输出差值,如果没有找到,输出-1 题解: 二分,妥妥的#include<cstring>#include<string>#include<iostream>#include<queue>#include<cstdio>#in
2016-10-14 18:59:20 382
原创 CodeForces 455D Serega and Fun (分块+双端队列)
题意:给出一个序列,两种操作 1.将区间[l,r]滚动一次 2.询问区间[l,r]中值等于k的数有多少个 在线分块之后,两种操作都能在sqrt(n)的复杂度内解决,将每个块都设置为队列,这样滚动起来非常方便一开始没有看到数值的范围,直接用的分块+bitset+双端队列,结果T了,后来看到了这一点,想写个分块+循环队列,结果发现编程复杂度太高..(好菜)…最终还是分块+双端队列…#include
2016-10-12 11:35:11 1667
原创 HDU 5919 Sequence II(主席树)
题意:给出一个长度为n的序列,m次询问,每次询问取出【l,r】区间内所有第一次出现的数字下标,输出这些下标的中位数,强制在线分析:由于需要强制在线处理,并且没有修改,所以考虑用主席树,统计第一次出现的数字下标,直接倒着扫一遍数组建树,每一次询问,统计区间个数,二分查找第k个数,复杂度mlog(n)mlog(n)#include<cstring>#include<string>#include<i
2016-10-07 10:06:30 368
原创 CodeForces 13E Holes(分块)
题意: 有n个洞,每个洞有一个power值,表示进入这个洞的球能够被弹到i+power处,两种操作 1.将a洞的power改为b 2.询问从洞a开始放一个球,能被弹出的次数和最终位置题解: 分块处理,每个块中处理每个点被弹出这个块的位置和次数。 调整了一下块的大小,优化了500ms+#include<cstring>#include<string>#include<iostream>
2016-10-14 18:10:58 593
原创 BZOJ 2957 楼房重建 (分块)
很容易观察到其实就是在找斜率的最长上升序列,分块之后直接处理斜率,怕有精度误差所以用的乘法做判断小于关系,加了一点小优化卡过去了 直接用double表示斜率貌似也可过/************************************************************** Problem: 2957 User: wsa Language: C++
2016-10-10 18:36:29 685
原创 ACdream 1738 世风日下的哗啦啦族I(分块)
题意:给出一个序列三种操作 1 a b 修改a妹子的裙子,变成b长度 2 l r 查询[l,r]区间的妹子最短的裙子长度,并输出有多少个妹子穿这个长度裙子的 3 l r t 输出[l,r]区间的妹子身穿裙子长度小于等于t的个数暴力分块,优化一下了二分#include<cstring>#include<string>#include<iostream>#include<queue>
2016-10-10 16:05:23 357
原创 HihoCoder 1236 Scores (五维偏序bitset+分块)
题意: 五维偏序问题,在给出的五维向量中,m次询问有多少个是完全偏序看了qsc大牛的代码才知道偏序问题还可以这样做… 大概是这么回事,对于每一维我们这样预处理它: 1.排序,分块 2.bitset存储下标状态,每个块的bitset存储前缀状态(方便后面询问处理结果) 对于每次询问,二分查找每一维对应的下标,那么这个下标前面所有的块都是答案,这样的得到的五个答案用bitset &操作一下就可
2016-10-09 21:02:42 1074
原创 CDOJ 1157 数列(seq) (分块)
题意:给出一个数列,两种操作 1.修改操作:把数列中第i个数改为x 2.询问操作:给定一个位置i,问数列中有多少个位置j ( j>i ),满足位置i与位置j间所有的数都不超过Ai与Aj的较大值。简单来说,操作2分为两部分 1.位置i右边相邻连续的比它小的数字个数 2.位置i右边不减序列长度 直接将数列分块,分块暴力维护和求解答案 第一部分询问做法:记录块中最大值为多少,如果整个块中值小于
2016-10-09 17:37:50 596
原创 HDU 4858 项目管理(点分块)
题意:给出一张图,两种操作 1.将点x加上权值y 2.询问与点x相邻点的权值和分析:将点分为重点和轻点,度数大于等于sqrt(m)sqrt(m)为重点,小于的为轻点,将重点和相邻重点连边,轻边和相邻所有边连边,得到规律,重点的答案是由周围重点和轻点对它的加成组成,而轻点答案直接由相邻点组成,复杂度 O(q∗sqrt(m))O(q*sqrt(m))#include<cstring>#includ
2016-10-09 17:29:22 652
原创 UESTC 1292 卿学姐种花 (分块)
题意:给出一个长度为n的序列,m次操作,操作分为两种: 1.在x的位置上加上数y,在x+1的位置加上数y-1,以此类推,一直到n或者y为0. 2.询问x位置上数字为多少分析:乍一看像是线段树,但是貌似又很难用线段树解决,主要是区间不好处理,而分块对于这类题目有优势,在区间上更容易计数,对于每个块,对于1操作,如果某个块全覆盖,记录两个值,增值和差值,通过加加减减就能得到答案,如果不是全覆盖直接s
2016-10-07 23:28:59 359
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人