• 【UESTC】1425 Another LCIS


      1 #include<cstdio>
      2 #define MAXN 100010
      3 struct node
      4 {
      5     int left,right,res,add,x,y;
      6 };
      7 node tree[MAXN<<2];
      8 int n;
      9 inline int MAX(int x,int y)
     10 {
     11     return x>y?x:y;
     12 }
     13 inline int MIN(int x,int y)
     14 {
     15     return x>y?y:x;
     16 }
     17 inline void PushUp(int mid,int L,int R,int rt)
     18 {
     19     tree[rt].x=tree[rt<<1].x;
     20     tree[rt].y=tree[rt<<1|1].y;
     21     tree[rt].left=tree[rt<<1].left;
     22     tree[rt].right=tree[rt<<1|1].right;
     23     tree[rt].res=MAX(tree[rt<<1].res,tree[rt<<1|1].res);
     24     if(tree[rt<<1].y<tree[rt<<1|1].x)
     25     {
     26         if(tree[rt].left==mid-L+1)
     27             tree[rt].left+=tree[rt<<1|1].left;
     28         if(tree[rt].right==R-mid)
     29             tree[rt].right+=tree[rt<<1].right;
     30         tree[rt].res=MAX(tree[rt].res,tree[rt<<1].right+tree[rt<<1|1].left);
     31     }
     32 }
     33 inline void PushDown(int L,int R,int rt)
     34 {
     35     if(tree[rt].add)
     36     {
     37         tree[rt<<1].add+=tree[rt].add;
     38         tree[rt<<1|1].add+=tree[rt].add;
     39         tree[rt<<1].x+=tree[rt].add;
     40         tree[rt<<1].y+=tree[rt].add;
     41         tree[rt<<1|1].x+=tree[rt].add;
     42         tree[rt<<1|1].y+=tree[rt].add;
     43         tree[rt].add=0;
     44     }
     45 }
     46 void Build(int L,int R,int rt)
     47 {
     48     tree[rt].add=0;
     49     if(L==R)
     50     {
     51         scanf("%d",&tree[rt].x);
     52         tree[rt].y=tree[rt].x;
     53         tree[rt].left=tree[rt].right=tree[rt].res=1;
     54     }
     55     else
     56     {
     57         int mid=(L+R)>>1;
     58         Build(L,mid,rt<<1);
     59         Build(mid+1,R,rt<<1|1);
     60         PushUp(mid,L,R,rt);
     61     }
     62 }
     63 void Update(int x,int y,int val,int L,int R,int rt)
     64 {
     65     if(x<=L&&R<=y)
     66     {
     67         tree[rt].add+=val;
     68         tree[rt].x+=val;
     69         tree[rt].y+=val;
     70     }
     71     else
     72     {
     73         int mid=(L+R)>>1;
     74         PushDown(L,R,rt);
     75         if(mid>=x)
     76             Update(x,y,val,L,mid,rt<<1);
     77         if(y>mid)
     78             Update(x,y,val,mid+1,R,rt<<1|1);
     79         PushUp(mid,L,R,rt);
     80     }
     81 }
     82 int Query(int x,int y,int L,int R,int rt)
     83 {
     84     if(x<=L&&R<=y)
     85         return tree[rt].res;
     86     int mid=(L+R)>>1,ans=0;
     87     PushDown(L,R,rt);
     88     if(mid>=x)
     89         ans=MAX(ans,Query(x,y,L,mid,rt<<1));
     90     if(y>mid)
     91         ans=MAX(ans,Query(x,y,mid+1,R,rt<<1|1));
     92     if(tree[rt<<1].y<tree[rt<<1|1].x)
     93         ans=MAX(ans,MIN(mid-x+1,tree[rt<<1].right)+MIN(y-mid,tree[rt<<1|1].left));
     94     return ans;
     95 }
     96 int main()
     97 {
     98     char ch;
     99     int c,m,x,y,v,ca=1;
    100     scanf("%d",&c);
    101     while(c--)
    102     {
    103         scanf("%d%d",&n,&m);
    104         Build(1,n,1);
    105         printf("Case #%d:\n",ca++);
    106         while(m--)
    107         {
    108             scanf(" %c",&ch);
    109             if(ch=='a')
    110             {
    111                 scanf("%d%d%d",&x,&y,&v);
    112                 Update(x,y,v,1,n,1);
    113             }
    114             else
    115             {
    116                 scanf("%d%d",&x,&y);
    117                 printf("%d\n",Query(x,y,1,n,1));
    118             }
    119         }
    120     }
    121     return 0;
    122 }
    新博客:www.zhixiangli.com
  • 相关阅读:
    电脑磁盘分区助手:DiskGenius磁盘管理与数据恢复软件
    python安装第三方的包
    教你成为全栈工程师(Full Stack Developer) 四十五-一文读懂hadoop、hbase、hive、spark分布式系统架构
    北半球 自己动手做聊天机器人
    [08] 请求、会话、上下文属性比较
    [07] ServletContext上下文对象
    [06] Session实现机制以及和Cookie的区别
    [05] Session概要
    [04] Cookie概念和基本使用
    [03] Servlet继承关系和生命周期
  • 原文地址:https://www.cnblogs.com/DrunBee/p/2516785.html
Copyright © 2020-2023  润新知