zoukankan      html  css  js  c++  java
  • bzoj1012题解

    【解题思路】

      强制在线线段树/树状数组,没什么好说的。。复杂度O(mlog2m)(线段树)或O(mlog22m)(树状数组)。

    【参考代码】

    (还naive的时候写的zkw真是翔。。)

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define REP(I,start,end) for(int I=start;I<=end;I++)
     5 #define FNI -2147483647-1
     6 using namespace std;
     7 struct zkw_LineTree
     8 {
     9     int startPoint,savTree[600001];
    10     inline void Clear(int n)
    11     {
    12         startPoint=1;
    13         while(startPoint<n)
    14             startPoint<<=1;
    15         REP(i,1,startPoint+n-1)
    16             savTree[i]=FNI;
    17     }
    18     inline void Change(int place,int delta)
    19     {
    20         int p=startPoint+place-1;
    21         while(p)
    22         {
    23             savTree[p]=max(savTree[p],delta);
    24             p>>=1;
    25         }
    26     }
    27     inline int Query(int left,int right)
    28     {
    29         int l=startPoint+left-1,r=startPoint+right-1,result=FNI;
    30         bool onRight=false,onLeft=false;
    31         while(l+1<r)
    32         {
    33             if(l&1)
    34             {
    35                 if(!onRight)
    36                 {
    37                     onRight=true;
    38                     result=max(result,savTree[l]);
    39                 }
    40             }
    41             else
    42                 if(onRight)
    43                     result=max(result,savTree[l+1]);
    44             l>>=1;
    45             if(r&1)
    46             {
    47                 if(onLeft)
    48                     result=max(result,savTree[r-1]);
    49             }
    50             else
    51                 if(!onLeft)
    52                 {
    53                     onLeft=true;
    54                     result=max(result,savTree[r]);
    55                 }
    56             r>>=1;
    57         }
    58         if(!onRight)
    59             result=max(result,savTree[l]);
    60         if(!onLeft)
    61             result=max(result,savTree[r]);
    62         return result;
    63     }
    64 }LineTree;
    65 int n,Claris;
    66 int main()
    67 {
    68     scanf("%d%d",&n,&Claris);
    69     int len=0,ans=0;
    70     LineTree.Clear(n);
    71     while(n--)
    72     {
    73         char ch=getchar();
    74         while(ch!='A'&&ch!='Q')
    75             ch=getchar();
    76         int t;
    77         scanf("%d",&t);
    78         if(ch=='A')
    79             LineTree.Change(++len,(ans+t)%Claris);
    80         else
    81         {
    82             ans=LineTree.Query(len-t+1,len);
    83             printf("%d
    ",ans);
    84         }
    85     }
    86     return 0;
    87 }
    View Code
    We Secure, We Contain, We Protect.
  • 相关阅读:
    http协议头文件的控制信息 .
    http头文件详解
    java(计算机)常见加密算法详解
    设计模式系列命令模式
    dom对象模型浏览器对象的分层结构图
    验证码实现详解
    JAVA中使用FTPClient实现文件上传下载
    javax.crypto.Cipher类提供加密和解密功能,该类是JCE框架的核心。
    java中的使用RSA算法进行公钥加密私钥解密 .
    Httpservlet源码及实现机制详解
  • 原文地址:https://www.cnblogs.com/spactim/p/6430890.html
Copyright © 2011-2022 走看看