CodeForces - 13E(分块)】的更多相关文章

题目链接:http://codeforces.com/problemset/problem/13/E 题意:给定n个弹簧和每个弹簧初始的弹力a[].当球落在第i个位置.则球会被弹到i+a[i]的位置. 现在有2种操作: 1 a b:把第a个弹簧的弹力修改为b. 2 a:当球初始放入的位置为a时,需要弹几次才会弹出n.弹出前的最后一个位置是多少. 输出位置和次数. 思路:和BZOJ 2002一样. 然后记录一个最后弹出去的位置preidx.每次弹出当前块的时候记录当前的位置即可.然后最后再暴力模拟…
正解是动态树,太难了,仅仅好分块处理水之.看了看status大概慢了一倍之多..     分块算法大体就是在找一个折衷点,使得查询和改动的时间复杂度都不算太高,均为o(sqrt(n)),所以总的时间复杂度为o(m*sqrt(n)).     分块的大体思想就是将整段区间分成sqrt(n),每次改动影响所在段内的sqrt(n)个点.每次查询遍历sqrt(n)段,然后搞出一些事情.     对于此题,首先说明几个数组的含义:     cnt[i]的意义为从i点開始跳出其所在段所须要的步数.    …
题意 n(n≤105)个洞排成一条直线,第ii个洞有力量值ai,当一个球掉进洞ii时就会被立刻弹到i+ai,直到超出n.进行m(m≤105)次操作: ·修改第i个洞的力量值ai. ·在洞xx上放一个球,问该球几次后被哪个洞弹飞出界. 思路 分块暴力,每个块内维护两个信息(块内DP可以求出): ①从当前位置跳出块内需要跳几次num[i] ②从当前块内跳出的下一个位置jump[i] 修改: 只需要将修改元素所在块内信息更新一次即可,单次时间复杂O(√n) 查询: 由起点i不停往下一个块跳jump[i…
Little Petya likes to play a lot. Most of all he likes to play a game «Holes». This is a game for one person with following rules: There are N holes located in a single row and numbered from left to right with numbers from 1 to N. Each hole has it's…
题目链接 nextt数组表示这个位置的下一个位置. cnt数组表示这个位置 i 到nextt[i]可以弹几次. end[i] 表示在从 i 弹出去的情况下, 最后一个位置是哪里. 然后就看代码吧. #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #includ…
题目链接:http://codeforces.com/problemset/problem/444/C 题意:给定一个长度为n的序列a[].起初a[i]=i,然后还有一个色度的序列b[],起初b[i]=0.现在有2种操作: 1 l r x:区间染色,a[l],a[l+1]...a[r]变成x.同时b[l],b[l+1]...b[r]加上对应的|x-a[i]|值. 2 l r:统计区间和,统计区间b[l],b[l+1]...b[r]的和. 思路:线段树是比较常见的做法.考虑分块.每块维护一个laz…
题目链接:http://codeforces.com/problemset/problem/455/D 题意:给定一个长度为n的序列a[]. m次操作.共有两种操作 1 l r:将序列的a[l].a[l+1]...a[r]变成a[r].a[l].a[l+1]...a[r-1]:2 l r k:求序列a[l].a[l+1]...a[r]中有多少个值为k. 输入的l,r,k都是加密过的.所以要解密一下.规则为 l=(l+ans-1)%n+1  r=(r+ans-1)%n+1 k=(k+ans-1)%…
题目链接:http://codeforces.com/problemset/problem/551/E 题意:给定一个长度为N的序列. 有2个操作 1 l r v:序列第l项到第r项加v(区间加),  2 v:求整个序列中值为v的数的位置的差值最大是多少.不存在输出-1. 思路:分块. 每块维护该块序列排序后的序列. 对于区间修改,我们定义一个lazy标记.对于整块的修改我们只修改lazy, 其他情况暴力修改.然后情况该块后重新加入修改后的块然后排序. 对于查询操作.查询每块时v应该减去该块的l…
题目链接:http://codeforces.com/problemset/problem/103/D 题意:给定一个长度为n的序列.然后q个询问.每个询问为(a,b),表示从序列第a项开始每b项的加和. 思路:2014集训队论文中的<<根号算法--不只是分块>>中提到这题. 传统的数据结构比较擅长处理连续区间的询问.但是不擅长处理间隔位置的询问.考虑到分块. 对于b>sqrt(n)的询问.我们暴力计算.可以发现b越大我们扫描的位置就会越小.最大扫描次数为O(n/sqrt(n…
Everyone knows that DNA strands consist of nucleotides. There are four types of nucleotides: "A", "T", "G", "C". A DNA strand is a sequence of nucleotides. Scientists decided to track evolution of a rare species, wh…