CodeForces 13E. Holes 分块处理
正解是动态树,太难了,仅仅好分块处理水之。看了看status大概慢了一倍之多。。
分块算法大体就是在找一个折衷点,使得查询和改动的时间复杂度都不算太高,均为o(sqrt(n)),所以总的时间复杂度为o(m*sqrt(n))。
分块的大体思想就是将整段区间分成sqrt(n),每次改动影响所在段内的sqrt(n)个点。每次查询遍历sqrt(n)段,然后搞出一些事情。
对于此题,首先说明几个数组的含义:
cnt[i]的意义为从i点開始跳出其所在段所须要的步数。
goal[i]的意义为从i点開始所经历的最后一个点。
jmp[i]的意义为从i点開始跳出所在段之后第一个到达点。
明确了这几个意义之后看代码就好了,文字太无力。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <ctime>
#include <iomanip> #pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-6)
#define LL long long
#define ULL unsigned long long
#define _LL __int64
#define INF 0x3f3f3f3f
#define Mod 1000000007 using namespace std; const int MAXN = 100010,BLOCK = sqrt(100010); int jmp[MAXN],cnt[MAXN],goal[MAXN],val[MAXN]; void Updata(int x,int y,int n)
{
if(y > n)
{
jmp[x] = MAXN;
cnt[x] = 1;
goal[x] = x;
}
else if(x/BLOCK*BLOCK == y/BLOCK*BLOCK)
{
jmp[x] = jmp[y];
cnt[x] = cnt[y]+1;
goal[x] = goal[y];
}
else
{
jmp[x] = y;
cnt[x] = 1;
goal[x] = y;
}
} void Cal(int x)
{
int ans = 0,f; while(x != MAXN)
{
f = goal[x];
ans += cnt[x];
x = jmp[x];
} printf("%d %d\n",f,ans); } int main()
{
int i,j,u,v,n,m,ord,L; scanf("%d %d",&n,&m); for(i = 1;i <= n; ++i)
scanf("%d",&val[i]); for(i = n;i >= 1; --i)
Updata(i,i+val[i],n); while(m--)
{
scanf("%d",&ord); if(ord)
{
scanf("%d",&u);
Cal(u);
}
else
{
scanf("%d %d",&u,&v);
val[u] = v;
L = u/BLOCK*BLOCK;
for(i = u;i >= L; --i)
Updata(i,i+val[i],n);
}
} return 0;
}
CodeForces 13E. Holes 分块处理的更多相关文章
- codeforces 13E . Holes 分块
题目链接 nextt数组表示这个位置的下一个位置. cnt数组表示这个位置 i 到nextt[i]可以弹几次. end[i] 表示在从 i 弹出去的情况下, 最后一个位置是哪里. 然后就看代码吧. # ...
- codeforces 13EE. Holes(分块&动态树)
E. Holes time limit per test 1 second memory limit per test 64 megabytes input standard input output ...
- CodeForces - 13E(分块)
Little Petya likes to play a lot. Most of all he likes to play a game «Holes». This is a game for on ...
- CF 13E. Holes 分块数组
题目:点这 跟这题BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 一模一样 分析: 分块数组入门题. 具体的可以学习这篇博文以及做国家集训队2008 - 苏煜<对块状链表的一 ...
- (分块)Holes CodeForces - 13E
题意 n(n≤105)个洞排成一条直线,第ii个洞有力量值ai,当一个球掉进洞ii时就会被立刻弹到i+ai,直到超出n.进行m(m≤105)次操作: ·修改第i个洞的力量值ai. ·在洞xx上放一个球 ...
- Codeforces Beta Round #13 E. Holes 分块暴力
E. Holes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/13/problem/E Des ...
- CodeForces 13E 分块
题目链接:http://codeforces.com/problemset/problem/13/E 题意:给定n个弹簧和每个弹簧初始的弹力a[].当球落在第i个位置.则球会被弹到i+a[i]的位置. ...
- CF 13E Holes
Holes 题意:现在有一排洞,每个洞有一个弹力,能弹到ai之后的洞,球会弹到这个排的外面,现在有2个操作,0 a b 将第a个洞的弹力设为b, 1 a 将球放入第a个洞,求输出进洞的次数 和 弹出这 ...
- CodeForces - 13E
Little Petya likes to play a lot. Most of all he likes to play a game «Holes». This is a game for on ...
随机推荐
- android 4.0后不允许屏蔽掉home键
屏蔽home键的方法 // 屏蔽掉Home键 public void onAttachedToWindow() { this.getWindow().setType(WindowManager.Lay ...
- Jquery学习笔记:通过层次关系获取jquery对象
前面一篇文章,我们介绍了如何通过web标签的id , css样式值来获取jquery对象. 但这只是基本方法,不能满足所有场景的需求. 本文介绍通过dom元素之间的层次关系获取元素.具体是将各种标识符 ...
- boost 分析命令行参数
#include <boost/program_options.hpp> #include <iostream> #include <vector> using n ...
- qrcode 4.0.4 : Python Package Index
qrcode 4.0.4 : Python Package Index qrcode 4.0.4 Download qrcode-4.0.4.tar.gz QR Code image generato ...
- Linux中处理需要传输的IP报文流程
本文主要讲解了Linux中处理需要传输的IP报文流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式对Linux中处理需要传输的IP报文流程进行了讲解,希望可以对 ...
- Python IDLE 运行错误:IDLE's subprocess didn't make connection. --已解决(原创)!
Python IDLE 错误描述: Subprocess Startup ErrorIDLE's subprocess didn't make connection. Either IDLE can' ...
- Java中的字符串驻留
转自:http://www.cdtarena.com/javapx/201307/9088.html 最近在工作的时候,一句再正常不过的代码String a = “hello” + “world”;被 ...
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克的显示
1.先定义坦克的一些属性 class Tank : public CCSprite { public : Tank(); ~Tank(); static Tank* createTankWithTan ...
- 社交舞 - 简介,释名,风格,舞步 - 金山词霸汉语 - HAPPY Life
社交舞 - 简介,释名,风格,舞步 - 金山词霸汉语 - HAPPY Life 社交舞 编辑词条 创建词条 内容来源 社交舞(英语:ballroom dance),又称交谊舞或交际舞,是来源于西方的一 ...
- HDU4850 构造一个长度n串,它需要随机长度4子是不相同
n<=50W.(使用26快报) 构造函数:26一个.截至构建26^4不同的字符串,最长的长度26^4+3.如此之大的输出"impossble",被判重量的四维阵列. 在正向结 ...