codeforces 722C. Destroying Array

来源:互联网 发布:linux怎么安装字体 编辑:程序博客网 时间:2024/05/19 08:43

题目链接:传送门
线段树的维护和更新
这是网上一份代码,学习了

#include <bits/stdc++.h>using namespace std;#define N 100100#define mod 1000000007#define inf 2000000000000000llstruct node{    long long int l,r,sum;}t[N];bool flag[N];int a[N],b[N];long long int c[N];int main(){    int i,j,n,m;    cin>>n;    for(i=1;i<=n;i++){        cin>>a[i];        t[i].l=i;        t[i].r=i;        t[i].sum=a[i];    }    int x;    for(i=1;i<=n;i++)        cin>>b[i];        long long int Max=0;    for(i=n;i>0;i--){        x=b[i];        flag[x]=1;        if(flag[x-1]){            t[x].l=t[x-1].l;            t[t[x].l].sum=t[t[x-1].l].sum+t[t[x].r].sum;            t[x].sum=t[t[x].l].sum;            if(flag[x+1]) t[t[x].l].r=t[x+1].r;            else t[t[x].l].r=t[x].r;        }        if(flag[x+1]){            t[x].r=t[x+1].r;            t[t[x].r].l=t[x].l;            t[t[x].r].sum=t[t[x].r].sum+t[t[x].l].sum;            t[t[x].l].sum=t[t[x].r].sum;            if(flag[x-1]) t[t[x].r].l=t[x].l;        }        Max=max(Max,t[t[x].l].sum);        Max=max(Max,t[t[x].r].sum);        c[i]=Max;    }    for(i=2;i<=n;i++)        cout<<c[i]<<endl;    cout<<"0"<<endl;    return 0;}
0 0
原创粉丝点击