题意

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],并且累计次数num[i],在最后一个块内暴力便利一遍就行了

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=1e5+10;
int n,m,bl,bel[maxn],x,y;
int a[maxn],num[maxn],jump[maxn];
void update(int x)
{
int fr=x*bl,to=fr+bl-1;if(to>n) to=n;
for(int i=to;i>=fr;i--){
if(a[i]+i>to){
num[i]=1;
jump[i]=a[i]+i;
}
else{
num[i]=num[i+a[i]]+1;
jump[i]=jump[i+a[i]];
}
}
}
void query(int x)
{
int ans=0,i,pre;
for(i=x;i<=n;i=jump[i])
ans+=num[i],pre=i;
while(pre+a[pre]<=n)
pre+=a[pre];
printf("%d %d\n",pre,ans);
}
int main()
{
scanf("%d%d",&n,&m);
int op;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
num[i]=0;
jump[i]=i;
}
bl=sqrt(n);
for(int i=0;i<=n/bl;i++)
update(i);
while(m--){
scanf("%d",&op);
if(op==0){
scanf("%d%d",&x,&y);
a[x]=y;
update(x/bl);
}
else{
scanf("%d",&x);
query(x);
}
}
return 0;
}

  

 

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

  1. Mice and Holes CodeForces - 797F

    Mice and Holes CodeForces - 797F 题意:有n只老鼠和m个洞,都在一个数轴上,老鼠坐标为x[1],...,x[n],洞的坐标为p[1],...,p[m],每个洞能容纳的老 ...

  2. CodeForces 13E. Holes 分块处理

    正解是动态树,太难了,仅仅好分块处理水之.看了看status大概慢了一倍之多..     分块算法大体就是在找一个折衷点,使得查询和改动的时间复杂度都不算太高,均为o(sqrt(n)),所以总的时间复 ...

  3. codeforces 13E . Holes 分块

    题目链接 nextt数组表示这个位置的下一个位置. cnt数组表示这个位置 i 到nextt[i]可以弹几次. end[i] 表示在从 i 弹出去的情况下, 最后一个位置是哪里. 然后就看代码吧. # ...

  4. 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 ...

  5. CodeForces 13E 分块

    题目链接:http://codeforces.com/problemset/problem/13/E 题意:给定n个弹簧和每个弹簧初始的弹力a[].当球落在第i个位置.则球会被弹到i+a[i]的位置. ...

  6. 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 ...

  7. 构造+分块思想 Codeforces Round #319 (Div. 1) C

    http://codeforces.com/contest/576/problem/C 题目大意: 给你一个曼哈顿距离的图,然后要求你找到一个链,链穿了所有的点 然后要求这链的长度<=25*10 ...

  8. AC日记——Mice and Holes codeforces 797f

    797F - Mice and Holes 思路: XXYXX: 代码: #include <cmath> #include <cstdio> #include <cst ...

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

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

随机推荐

  1. 【u105】路径计数2

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一个N×N的网格,你一开始在(1, 1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问 ...

  2. Linux 内核中的数据类型

    在我们进入更高级主题之前, 我们需要停下来快速关注一下可移植性问题. 现代版本的 Linux 内核是 高度可移植的, 它正运行在很多不同体系上. 由于 Linux 内核的多平台特性, 打算做认真使用的 ...

  3. CentOS服务器安装mysql

    1.配置YUM源 下载mysql源安装包 [root@localhost~]#wget http://dev.mysql.com/get/mysql57-community-release-el7-8 ...

  4. 【39.87%】【BZOJ 1880】[Sdoi2009]Elaxia的路线

    Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 1041  Solved: 415 [Submit][Status][Discuss] Descripti ...

  5. 【hdu 1848】Fibonacci again and again

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  6. hibernate配置文件模板

    hibernate.cfg.xml 配置文件模版: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-config ...

  7. JDK源码系列(一) ------ 深入理解SPI机制

    什么是SPI机制 最近我建了另一个文章分类,用于扩展JDK中一些重要但不常用的功能. SPI,全名Service Provider Interface,是一种服务发现机制.它可以看成是一种针对接口实现 ...

  8. $BZOJ1799\ Luogu4127$ 月之谜 数位统计$DP$

    AcWing Description Sol 看了很久也没有完全理解直接$DP$的做法,然后发现了记搜的做法,觉得好棒! 这里是超棒的数位$DP$的记搜做法总结   看完仿佛就觉得自己入门了,但是就像 ...

  9. <算法><go实现>左括号补全-双栈法

    输入:1+2)*33-44)*555-666))) 输出:((1+2)*((33-44)*(555-666))) 代码实现及注释: package main import "fmt" ...

  10. 2013 ACM-ICPC亚洲区域赛南京站C题 题解 轮廓线DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4804 题目大意 给你一个 \(n \times m\) 的矩形区域.你需要用 \(1 \times 1 ...