zoukankan      html  css  js  c++  java
  • bzoj 2002 弹飞绵羊 分块

    正解lct,然而本蒟蒻并不会....

    分块思路很清晰,处理出每个点弹出所在块所需要的步数及出去后的第一个位置

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    #define N 200005
    using namespace std;
    int n,m,nn,k[N],nxt[N],ned[N],be[N],tot;
    int opt,aa,bb,ans;
    void work(int x){
    	int l=(x-1)*nn+1,r=x*nn;
    	r=min(r,n);
    	for(int i=r;i>=l;i--)
    	{
    		if(i+k[i]>r){
    			ned[i]=1;
    			nxt[i]=i+k[i];
    		}
    		else{
    			ned[i]=ned[i+k[i]]+1;
    			nxt[i]=nxt[i+k[i]];
    		}
    	}
    }
    int main()
    {
    	scanf("%d",&n);
    	nn=sqrt(n); 
    	for(int i=1;i<=n;i++){
    		scanf("%d",&k[i]);            
    		be[i]=(i-1)/nn+1;
    	}
    	tot=be[n];
    	for(int i=1;i<=tot;i++) work(i);
    	scanf("%d",&m);
    	for(int i=1;i<=m;i++)
    	{
    		scanf("%d%d",&opt,&aa);
    		aa++;
    		if(opt==1)
    		{
    			ans=0;
    			while(aa<=n){
    				ans+=ned[aa];
    				aa=nxt[aa];
    			}
    			printf("%d
    ",ans);
    		}
    		else{
    			scanf("%d",&bb);
    			k[aa]=bb;
    			work(be[aa]);
    		}
    	}
    	return 0;
    }

    人生如梦亦如幻 朝如晨露暮如霞。
  • 相关阅读:
    演义江湖PC端意见汇总
    演义江湖移动端内存优化意见汇总
    BitmapData类介绍
    我的职业规划_2013-7-29
    总结调用Flash的几种方法
    Pycharm注册
    删除表
    读取url中某个值
    Pycharm常用快捷键
    pip3使用
  • 原文地址:https://www.cnblogs.com/Ren-Ivan/p/7746764.html
Copyright © 2011-2022 走看看