Bzoj-2002&&Luogu-3203&CodeVS-2333

Posted zincsabian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bzoj-2002&&Luogu-3203&CodeVS-2333相关的知识,希望对你有一定的参考价值。

对比一下zz的分块QwQ

技术分享图片

技术分享图片

貌似因为加了快读所以比zz快了不少,当然还有一个原因是pascal大法qwq,一年前就听说这道题了,一直鸽了

众所周知(蓝鹅好像并不),分块是一种骗分的大法qwq。一直听说这是一道分块题,就来写写T T,卡了一晚上差点就看题解了QwQ

首先这道题貌似是有log级别的算法的(lct貌似就是),但是不会啊T T。数据范围资瓷$logn$和$√n$算法的,不过貌似lct的常数比较大,跑一波下来比分块还慢T T。

怎么做呢qwq,思考√n修改+√n查询,那么就把整段序列划分为√n段,对于每一个点预处理出它被弹出当前这个块需要几次,以及跳到这个块之外的什么地方,修改时需要成块修改,这样的话在同一个块中以当前点为跳板的点“被弹出当前这个块需要几次,以及跳到这个块之外的什么地方”才能够正确维护qwq,之前没注意到这个w了好多次啊T T,当然我语文菜啊T T,表述不清的请评论告诉我QWQ

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
#define ll long long
#define inf 0x7fffffff
inline int read()
{
    int x=0,f=1;char c=getchar();
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
    return x*f;
}
int n,siz,m;
int x[200005],nxt[200005],bl[200005],num[200005];
int main()
{
    n=read();siz=sqrt(n-1)+1;
    for(int i=1;i<=n;i++)x[i]=read(),nxt[i]=i,bl[i]=(i-1)/siz+1;
    for(int i=1;i<=n;i++)while(nxt[i]<=min(bl[i]*siz,n)){num[i]++;nxt[i]=nxt[i]+x[nxt[i]];}
    m=read();
    while(m--)
    {
        int st=read();
        if(st==1)
        {
            int now=read()+1,ans=0;
            while(now<=n) ans+=num[now],now=nxt[now];
            printf("%d\\n",ans);
        }
        else
        if(st==2)
        {
            int id=read()+1,r=min(bl[id]*siz,n),l=max((bl[id]-1)*siz+1,1);x[id]=read();
            for(int i=r;i>=l;i--)	
                    if(i+x[i]>min(bl[id]*siz,n)){nxt[i]=i+x[i];num[i]=1;}
                    else{nxt[i]=nxt[i+x[i]];num[i]=num[i+x[i]]+1;}
            //while(nxt[id]<=min(bl[id]*siz,n)){num[id]++;nxt[id]=nxt[id]+x[nxt[id]];}
        }
    }
    return 0;
}

  

 

以上是关于Bzoj-2002&&Luogu-3203&CodeVS-2333的主要内容,如果未能解决你的问题,请参考以下文章

[BZOJ 2002][Luogu 3203][HNOI2010]Bounce 弹飞绵羊

BZOJ2002 弹飞绵羊

BZOJ2002:[HNOI2010]弹飞绵羊——题解

MZOJ 1134 && LuoGu P2015 二叉苹果树

MZOJ 1132 && LuoGu P2014 选课

MZOJ 1127 && LuoGu P2016 战略游戏