zoukankan      html  css  js  c++  java
  • HNOI2010弹飞绵羊

    不得不说块状数组好神奇的啊!这道题的标签可是splay的启发是合并(什么高大上的东西),竟然这么轻松的就解决了!

    var x,y,i,j,tot,n,m,ch:longint;
        f,k,l,bl,go:array[0..200100] of longint;
    procedure init;
     begin
     readln(n);
     x:=trunc(sqrt(n));j:=x;
     for i:=1 to n do
      begin
      if j=x then begin j:=1;inc(tot);l[tot]:=i;end
      else inc(j);
      read(k[i]);
      bl[i]:=tot;
      end;
     l[tot+1]:=n+1;
     for i:=n downto 1 do
      if i+k[i]>=l[bl[i]+1] then begin f[i]:=1;go[i]:=i+k[i];end
      else begin f[i]:=f[i+k[i]]+1;go[i]:=go[i+k[i]];end;
     end;
    function ask(x:longint):longint;
     var sum:longint;
     begin
     sum:=0;
     while x<=n do begin inc(sum,f[x]);x:=go[x];end;
     exit(sum);
     end;
    procedure replace(x,y:longint);
     var  i:longint;
     begin
     k[x]:=y;
     for i:=x downto l[bl[x]] do
      if i+k[i]>=l[bl[i]+1] then begin f[i]:=1;go[i]:=i+k[i];end
      else begin f[i]:=f[i+k[i]]+1;go[i]:=go[i+k[i]];end;
     end;
    procedure main;
     begin
     readln(m);
     for i:=1 to m do
      begin
      read(ch);
      if ch=1 then
       begin
       readln(x);inc(x);
       writeln(ask(x));
       end
      else
       begin
       readln(x,y);inc(x);
       replace(x,y);
       end;
      end;
     end;
    begin
     init;
     main;
    end.   

     

  • 相关阅读:
    Java 多线程(一) 基础知识与概念
    hashMap和treeMap
    转:Java IO流学习总结
    hibernate缓存
    java aio nio bio
    java1.8新特性
    LeetCode Contiguous Array
    LeetCode Sort Characters By Frequency
    LeetCode Subarray Sum Equals K
    LeetCode Group Anagrams
  • 原文地址:https://www.cnblogs.com/zyfzyf/p/3763078.html
Copyright © 2011-2022 走看看