zoukankan      html  css  js  c++  java
  • 【线段树】bzoj3747 [POI2015]Kinoman

    题解:http://www.cnblogs.com/zyfzyf/p/4105184.html

    一、下传标记写法

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 using namespace std;
     5 #define lson rt<<1,l,m
     6 #define rson rt<<1|1,m+1,r
     7 int Num,CH[12],f,c;
     8 inline void R(int &x){
     9     c=0;f=1;
    10     for(;c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
    11     for(x=0;c>='0'&&c<='9';c=getchar())(x*=10)+=(c-'0');
    12     x*=f;
    13 }
    14 typedef long long ll;
    15 int n,m,w[1000001],now[1000001],b[1000001],fa[1000001];
    16 ll ans,maxv[4000001],delta[4000001];
    17 void pushdown(int rt)
    18 {
    19     if(delta[rt])
    20       {
    21         delta[rt<<1]+=delta[rt]; delta[rt<<1|1]+=delta[rt];
    22         maxv[rt<<1]+=delta[rt]; maxv[rt<<1|1]+=delta[rt];
    23         delta[rt]=0;
    24       }
    25 }
    26 void update(int ql,int qr,int v,int rt,int l,int r)
    27 {
    28     if(ql<=l&&r<=qr)
    29       {
    30         delta[rt]+=(ll)v;
    31         maxv[rt]+=(ll)v;
    32         return;
    33       }
    34     pushdown(rt); int m=l+r>>1;
    35     if(ql<=m) update(ql,qr,v,lson);
    36     if(m<qr) update(ql,qr,v,rson);
    37     maxv[rt]=max(maxv[rt<<1],maxv[rt<<1|1]);
    38 }
    39 ll query(int qr,int rt,int l,int r)
    40 {
    41     if(1<=l&&r<=qr) return maxv[rt];
    42     pushdown(rt);
    43     int m=l+r>>1; ll res=0;
    44     if(1<=m) res=max(res,query(qr,lson));
    45     if(m<qr) res=max(res,query(qr,rson));
    46     return res;
    47 }
    48 int main()
    49 {
    50     R(n); R(m);
    51     for(int i=1;i<=n;++i) R(b[i]);
    52     for(int i=1;i<=m;++i) R(w[i]);
    53     for(int i=1;i<=n;++i)
    54       {
    55         fa[i]=now[b[i]];
    56         now[b[i]]=i;
    57       }
    58     for(int i=1;i<=n;++i)
    59       {
    60         update(fa[i]+1,i,(ll)w[b[i]],1,1,n);
    61         if(fa[i]) update(fa[fa[i]]+1,fa[i],(ll)(-w[b[i]]),1,1,n);
    62         ans=max(ans,query(i,1,1,n));
    63       } printf("%lld
    ",ans);
    64     return 0;
    65 }

    二、不下传标记写法

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 using namespace std;
     5 #define lson rt<<1,l,m
     6 #define rson rt<<1|1,m+1,r
     7 int Num,CH[12],f,c;
     8 inline void R(int &x){
     9     c=0;f=1;
    10     for(;c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
    11     for(x=0;c>='0'&&c<='9';c=getchar())(x*=10)+=(c-'0');
    12     x*=f;
    13 }
    14 typedef long long ll;
    15 int n,m,w[1000001],now[1000001],b[1000001],fa[1000001];
    16 ll ans,maxv[4000001],delta[4000001];
    17 void update(int ql,int qr,int v,int rt,int l,int r)
    18 {
    19     if(ql<=l&&r<=qr)
    20       {
    21         delta[rt]+=(ll)v;
    22         return;
    23       }
    24     int m=l+r>>1;
    25     if(ql<=m) update(ql,qr,v,lson);
    26     if(m<qr) update(ql,qr,v,rson);
    27     maxv[rt]=max(maxv[rt<<1]+delta[rt<<1],maxv[rt<<1|1]+delta[rt<<1|1]);
    28 }
    29 ll query(int qr,int rt,int l,int r)
    30 {
    31     if(1<=l&&r<=qr) return maxv[rt]+delta[rt];
    32     int m=l+r>>1; ll res=0;
    33     if(1<=m) res=max(res,query(qr,lson));
    34     if(m<qr) res=max(res,query(qr,rson));
    35     return res;
    36 }
    37 int main()
    38 {
    39     R(n); R(m);
    40     for(int i=1;i<=n;++i) R(b[i]);
    41     for(int i=1;i<=m;++i) R(w[i]);
    42     for(int i=1;i<=n;++i)
    43       {
    44           fa[i]=now[b[i]];
    45           now[b[i]]=i;
    46       }
    47     for(int i=1;i<=n;++i)
    48       {
    49           update(fa[i]+1,i,(ll)w[b[i]],1,1,n);
    50           if(fa[i]) update(fa[fa[i]]+1,fa[i],(ll)(-w[b[i]]),1,1,n);
    51           ans=max(ans,query(i,1,1,n));
    52       } printf("%lld
    ",ans);
    53     return 0;
    54 }
  • 相关阅读:
    ios中的XMPP简介
    iOS项目开发中的目录结构
    ios中怎么样点击背景退出键盘
    ios中怎么处理键盘挡住输入框
    ios中怎么样调节占位文字与字体大小在同一高度
    ios中怎么样设置drawRect方法中绘图的位置
    ios中用drawRect方法绘图的时候设置颜色
    字符串常见操作
    字典、列表、元组
    字符串查看及应用
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4146466.html
Copyright © 2011-2022 走看看