。。这个题根据弹后的关系是很容易想出一个森林的。。修改连接关系就是cut和link。。

但是分块的做法似乎十分优越,,好写好调。所以学一下分块的写法

首先每一个区间的信息都是可以做到O(1)查询的。。就是dfs预处理

但如果有修改,就需要更新dfs,是O(n)的

由于每个点只会往后走,所以可以把原森林划分为从后往前的若干段

这样我们可以用类似dfs的便利对每个块处理处答案,使查询每个块为O(1)

这时要保留每个点到下一个块的哪个点的信息即可

修改一个块对其他块不造成影响,因为答案是分段统计的。

均摊o(n*sqrt(n)),但实际跑的很快

码:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define N 300005
int n,i,l[N],r[N],kuai[N],a[N],m,j,ans,o,oo,hou[N],len[N],q,op;
int main()
{scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&a[i]);     }m=sqrt(n);for(i=1;i<=m;i++){l[i]=r[i-1]+1;for(j=l[i];j<=l[i]+m;j++)kuai[j]=i;r[i]=l[i]+m;}r[m]=n;for(i=n;i>=1;i--){o=i+a[i];if(o>n){hou[i]=0; len[i]=1;  continue;}if(o>r[kuai[i]]){hou[i]=o; len[i]=1; continue;}hou[i]=hou[o]; len[i]=len[o]+1;        }scanf("%d",&q);while(q--){scanf("%d",&op);if(op==1){ans=0;scanf("%d",&o);o++;   while(o){ans+=len[o];o=hou[o];}  printf("%d\n",ans);       }else{scanf("%d%d",&o,&oo);   o++;a[o]=oo;op=o;for(i=r[kuai[op]];i>=l[kuai[op]];i--){o=i+a[i];if(o>n){hou[i]=0;    len[i]=1;  continue;}if(o>r[kuai[i]]){hou[i]=o; len[i]=1; continue;}hou[i]=hou[o]; len[i]=len[o]+1;    }}}
}

2017.10.7 弹飞绵羊 思考记录相关推荐

  1. 2017.10.5 最短母串 思考记录

    这个题n<=15,可以用10表示选取情况下的最优值 预处理两个串之间的连接关系,然后枚举状态转移 然而这个题还要输出方案,,而且还不让你开空间. 所以只能记录前继动态判断.. 所以十分难写难调 ...

  2. 2017.10.1 atcoder TK1 D 思考记录

    题目大意:给你10^5个物品,有重量和价值, 求重量按位或不超过k的物品的最大价值 首先它是不可以dp的,因为与运算对于背包不能离散,所以考虑模拟入手 从最高位往下找,来保证小于k 若这一位是1,则这 ...

  3. 2017.10.23 chess 中国象棋 思考记录

    这种题的一般解法: 1. 发现状压可以搞,然后发现状态爆炸 2.考虑状态特点,一共只有几种可能的状态 3.考虑可不可以只对状态进行计数 4.离散统计贡献 码: #include<iostream ...

  4. 2017.10.19 起床困难综合征 思考记录

    2333noi送分题 首先暴力试每个数有些二进制位是会重复算的,,所以就考虑能否把每个二进制位独立考虑 老性质:二进制运算每一位独立 所以二进制dp,如果这一位输入1,是多少,输入0,是多少 然后按二 ...

  5. 2017.10.11 network 网络扩容 思考记录

    第一问是网络流. 第二问是费用流,但之前的边依然是可以用的,所以每个点决策:用原来的流量    购买一条流量,扫每条边加进去就可以了 然后限制流出为k 码: #include<iostream& ...

  6. 2017.10.1 互不侵犯king 思考记录

    ..没想到做的这么顺利 首先n<=⑨.. 所以状压这个⑨ 然后枚举状态转移累加即可 f[行数][最上层排布情况][已经用了几个] 最后    Σf[n][i][k]   0<=i<2 ...

  7. Bounce 弹飞绵羊

    某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当 ...

  8. bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 10761  Solved: 5542 [Su ...

  9. 题解-弹飞绵羊 (HNOI2015)

    LCT 模板题,分块也很优秀. 分块做法 维护每个点到第一次跳到下一个块时的跳跃次数,并记录其跳到下一个块的第一个点. 注意常见的分块玄学操作 n = min(sqrt(N), 100) 和 n = ...

最新文章

  1. 20200428总结
  2. 二、在VMware中搭建PHP集成环境(lamp/lnmp/lanmp)
  3. Python 学习笔记(2) - 基本概念、运算符与表达式
  4. linux里面i386 i686 i486 i586代表什么?是什么意思
  5. Python中的命名空间是什么?
  6. 数据库原理—数据库管理系统的功能和特点(四)
  7. 微软silverlight视频教程
  8. Vue学习笔记之01-Vue的特点
  9. java调度问题的贪心算法_java代码,多机调度问题,怎么解释
  10. 1、计算机组成与体系结构
  11. 基于SPM8或CAT12进行的VBM分析
  12. PLC从业人员的发展方向
  13. 古代的人才选拔,哪种制度更好?
  14. Flixel Dame 坦克大战(二)Dame-editor使用指南
  15. 【001】机器学习基础-凸优化基础
  16. outlook 签名_Outlook 2007中的电子邮件签名礼节-适当的Flair
  17. uni-app Android端获取设备已连接的WiFi IP地址
  18. java 中文编码乱码_Java编码问题复习
  19. 八、jQuery的QQ音乐播放器
  20. 2015小米实习生笔试题1 求两个数的不同位的个数

热门文章

  1. Android 8.0 EditText 焦点无法移动到其他控件
  2. Android笔记 apk的反编译 | 更新于2017/7/25
  3. vrm华为_华为-笔记本电脑如何安装FusionCompute虚拟化平台?
  4. CNN转换为SNN的算法
  5. poj 1847 Tram 最短路 dijkstra、floyed
  6. 启动kafka报错:__consumer_offsets-22\00000000000000000000.index.swap: 另一个程序正在使用此文件,进程无法访问。
  7. 天正lisp文件路径_AutoCAD的文件组织形式和搜索路径 | 坐倚北风
  8. simulink接收串口数据_JLink RTT连接Simulink
  9. EmEditor18.1.2 注册码
  10. 用linux命令清空文件夹,技能包!Linux 下清空或删除大文件内容的 5 种方法