Portal

Description

\(n(n\leq10^5)\)个洞排成一条直线,第\(i\)个洞有力量值\(a_i\),当一个球掉进洞\(i\)时就会被立刻弹到\(i+a_i\),直到超出\(n\)。进行\(m(m\leq10^5)\)次操作:

  • 修改第\(i\)个洞的力量值\(a_i\)。
  • 在洞\(x\)上放一个球,问该球几次后被哪个洞弹飞出界。

Solution

将\(n\)个洞分成大小为\(\sqrt n\)的\(\sqrt n\)个块。

\(c[i]\)记录\(i\)要跳出所在的块需要多少次,\(nxt[i]\)记录跳出到哪个点。

修改时,从后到前重构该块内所有点的\(c[i]\)和\(nxt[i]\),其他块不受影响。

查询时,由\(i\)跳到\(nxt[i]\)并累加\(c[i]\),在即将出界\((nxt[i]>n)\)前一步一步跳来得知是哪个洞将它弹出界的。

时间复杂度\(O(m\sqrt n)\)。

Code

//Holes
#include <cstdio>
#include <cmath>
inline char gc()
{
static char now[1<<16],*S,*T;
if(S==T) {T=(S=now)+fread(now,1,1<<16,stdin); if(S==T) return EOF;}
return *S++;
}
inline int read()
{
int x=0,f=1; char ch=gc();
while(ch<'0'||'9'<ch) {if(ch=='-') f=-1; ch=gc();}
while('0'<=ch&&ch<='9') x=x*10+ch-'0',ch=gc();
return x*f;
}
int const N=1e5+10;
int n,m,n0;
int p[N],nxt[N],c[N];
void update(int t)
{
int fr=t*n0,to=fr+n0-1; if(to>n) to=n;
for(int i=to;i>=fr;i--)
if(i+p[i]>to) nxt[i]=i+p[i],c[i]=1;
else nxt[i]=nxt[i+p[i]],c[i]=1+c[i+p[i]];
}
int main()
{
n=read(),m=read(); n0=sqrt(n);
for(int i=1;i<=n;i++) p[i]=read(),nxt[i]=i,c[i]=0;
for(int t=0;t<=n/n0;t++) update(t);
for(int i=1;i<=m;i++)
{
int opt=read();
if(opt==0)
{
int x=read(),y=read();
p[x]=y; update(x/n0);
}
else
{
int res=0,pre;
for(int x=read();x<=n;x=nxt[x]) pre=x,res+=c[x];
while(pre+p[pre]<=n) pre+=p[pre];
printf("%d %d\n",pre,res);
}
}
return 0;
}

P.S.

双倍经验[Hnoi2010]Bounce 弹飞绵羊

Codeforces13E - Holes的更多相关文章

  1. Codeforces Beta Round #13 E. Holes 分块暴力

    E. Holes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/13/problem/E Des ...

  2. codeforces 13EE. Holes(分块&amp;动态树)

    E. Holes time limit per test 1 second memory limit per test 64 megabytes input standard input output ...

  3. 寻找复杂背景下物体的轮廓(OpenCV / C++ - Filling holes)

    一.问题提出 这是一个来自"answerOpenCV"(http://answers.opencv.org/question/200422/opencv-c-filling-hol ...

  4. Linux操作系统中文件结构stat中st_size的说明以及对于文件中洞(Holes)的理解

    文件stat结构体中st_size成员 对于所有的文件类型,st_size成员对其中的普通文件.目录以及符号链接有实在的意义.其中,对于普通文件而言,st_size记录了该文件的实际大小:对于目录而言 ...

  5. CF13E Holes LCT

    CF13E Holes LG传送门 双倍经验题,几乎同[HNOI2010]弹飞绵羊,LCT练手题,LG没有LCT题解于是发一波. 从当前点向目标点连边,构成一棵树,带修改就用LCT动态维护答案,由于不 ...

  6. Codeforces 797 F Mice and Holes

    http://codeforces.com/problemset/problem/797/F F. Mice and Holes time limit per test             1.5 ...

  7. E. Holes(分块)

    题目链接: E. Holes time limit per test 1 second memory limit per test 64 megabytes input standard input ...

  8. Codeforces Beta Round #13 E. Holes (分块)

    E. Holes time limit per test 1 second memory limit per test 64 megabytes input standard input output ...

  9. 2018/7/19 考试(tower,work,holes)

    noip模拟赛,挺良心的题,考的贼烂(膜一下@来日方长大佬(sdfz rank1)) 不多说了,看题吧 1.tower 题面: 铁塔(tower.pas/c/cpp) 题目描述 Rainbow和Fre ...

随机推荐

  1. linkin大话数据结构--字符串,数组,list之间的互转

    在实际开发中,我们经常会用到字符串,字符数组,字符list,当然也会不可避免的进行这3者之间的互相转换. 在使用到Apache和Google下的common包,可以这样子实现: package tz. ...

  2. Java NIO 之 Socket Channel

    在Java NIO中用Channel来对程序与进行I/O操作主体的连接关系进行抽象,这些IO主体包括如文件.Socket或其他设备.简而言之,指代了一种与IO操作对象间的连接关系. 按照Channel ...

  3. iOS项目——自定义UITabBar与布局

    在上一篇文章iOS项目——基本框架搭建中,我们详细说明了如何对TabBarItem的图片属性以及文字属性进行一些自定义配置.但是,很多时候,我们需要修改TabBarItem的图片和文字属性之外,还需要 ...

  4. JS前端验证代码

    手机号码正则表达式验证: function checkPhone(){ var phone = document.getElementById('phone').value; if(!(/^1[345 ...

  5. Java设计模式——模板方法模式

    转载自:https://www.cnblogs.com/zplogo/p/6428593.html 用抽象基类定义算法框架 RefreshBeverage package com.pattern.te ...

  6. 洛谷3月月赛 R1 Step! ZERO to ONE

    洛谷3月月赛 R1 Step! ZERO to ONE 普及组难度 290.25/310滚粗 t1 10分的日语翻译题....太难了不会... t2 真·普及组.略 注意长为1的情况 #include ...

  7. 51Nod 1225 余数之和 [整除分块]

    1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 F(n) = (n % 1) + (n % 2) + (n % 3) + ... ...

  8. market1501的学习,跟着苏同学的博客学习

    先看看官方文档:然后附上苏的博客链接http://bigbrothersue.com/index.php/2017/12/20/person-re-id/ The Market-1501 datase ...

  9. Material使用11 核心模块和共享模块、 如何使用@angular/material

    1 创建项目 1.1 版本说明 1.2 创建模块 1.2.1 核心模块 该模块只加载一次,主要存放一些核心的组件及服务 ng g m core 1.2.1.1 创建一些核心组件 页眉组件:header ...

  10. [Python Study Notes] python面试题总结

    python语法以及其他基础部分 可变与不可变类型: 浅拷贝与深拷贝的实现方式.区别:deepcopy如果你来设计,如何实现: __new__() 与 __init__()的区别: 你知道几种设计模式 ...