社区讨论

扪心刚学OI,阳历全过WA一半求条

AT_dp_q Flowers参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lol4njhn
此快照首次捕获于
2023/11/05 15:03
2 年前
此快照最后确认于
2023/11/05 15:03
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace Testify{
    int read(){
        int f(1),x(0);
        char ch=getchar();
        for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
        for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
        return f*x;
    }
    void WritE(int x){
        if(x<0) putchar('-'),x=-x;
        if(x>9) WritE(x/10);
        putchar(x%10+48);
    }
    void write(int x){
        WritE(x);
        puts("");
    }
    void Write(int x){
        WritE(x);
        putchar(' ');
    }
}
using namespace Testify;
const int N=3e5+5;
int dp[N],n;
int a[N],h[N];
struct node{
    int l,r,maxn;
    #define lid root<<1
    #define rid root<<1|1
}t[N<<2];
inline void pushup(int root){
    t[root].maxn=max(t[lid].maxn,t[rid].maxn);
}
inline void build(int root,int l,int r){
    t[root].l=l,t[root].r=r;
    if(l==r){
        return ;
    }
    int mid=(l+r)>>1;
    build(lid,l,mid);
    build(rid,mid+1,r);
}
inline void update(int root,int pos,int v){
    if(t[root].l==t[root].r){
        t[root].maxn=v;
        return;
    }
    int mid=(t[root].l+t[root].r)>>1;
    if(pos<=mid){
        update(lid,pos,v);
    }
    else{
        update(rid,pos,v);
    }
    pushup(root);
}
inline int query(int root,int l,int r){
    if(l<=t[root].l&&t[root].r<=r){
        return t[root].maxn;
    }
    int mid=(t[root].l+t[root].r)>>1;
    if(r<=mid){
        return query(lid,l,r);
    }
    else if(l>mid){
        return query(rid,l,r);
    }
    else{
        return max(query(lid,l,mid),query(rid,mid+1,r));
    }
}
signed main(void){
    n=read();
    for(register int i=1;i<=n;i++){
        h[i]=read();
    }
    for(register int i=1;i<=n;i++){
        a[i]=read();
    }
    build(1,1,n);
    for(register int i=1;i<=n;i++){
        dp[i]=query(1,1,h[i])+a[i];
        update(1,h[i],dp[i]);
    }
    write(dp[n]);
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...