zoukankan      html  css  js  c++  java
  • bzoj2002弹(dan)飞绵羊 分块水过

    据说是道lct求深度的题

    但是在小猫大的指点下用分块就n^1.5水过了

    = =数据忘记加强系列

    代码极其不美观,原因是一开始是听小猫大讲的题意,还以为是弹到最前面。。。

     1 #include <cstdio>
     2 #include <cmath>
     3 using namespace std;
     4 int n,m,p,q,k;
     5 int a[200001],b[200001],c[200001];
     6 int main()
     7 {
     8     scanf("%d",&n);
     9     for(int i=1;i<=n;i++)
    10         scanf("%d",&a[n-i+1]);
    11     int N=(int)sqrt(n);
    12     for(int i=1,j=0;i<=n;i++,j=(i-1)/N)
    13     {
    14         b[i]=i-a[i];c[i]=1;
    15         if(b[i]>j*N)
    16             c[i]+=c[b[i]],b[i]=b[b[i]];
    17     }
    18     scanf("%d",&m);
    19     for(int i=1;i<=m;i++)
    20     {
    21         scanf("%d%d",&p,&q);
    22         q=n-q;
    23         if(p==2)
    24         {
    25             scanf("%d",&k);
    26             a[q]=k;
    27             for(int j=(q-1)/N;q<=(j+1)*N;q++)
    28             {
    29                 b[q]=q-a[q];c[q]=1;
    30                 if(b[q]>j*N)
    31                     c[q]+=c[b[q]],b[q]=b[b[q]];
    32             }
    33         }
    34         else
    35         {
    36             int ans=0;
    37             while(q && a[q])
    38                 ans+=c[q],q=b[q];
    39             printf("%d
    ",ans);
    40         }
    41     }
    42     return 0;
    43 } 
  • 相关阅读:
    数论&数学中结论证明
    「Uva11401」数三角形
    「CJOJ2725」Wave
    「CJOJ2724」Number
    「CJOJ2723」Reserve
    「CJOJ2722」Ping
    「CJOJ2573」Snake vs Block
    「CJOJ2574」Lucky Transformati
    「CJOJ2721」取石块儿
    「CJOJ2366」机器人采集金属
  • 原文地址:https://www.cnblogs.com/wanglichao/p/5796552.html
Copyright © 2011-2022 走看看