AT_abc467_f 题解
到底是谁在说 F<E?到底是谁在说 F<E?到底是谁在说 F<E?到底是谁在说 F<E?到底是谁在说 F<E?到底是谁在说 F<E?到底是谁在说 F<E?
有任何道理吗???
F 好难啊。
我们首先贪心一波,发现肯定是优先写
接着你考虑去维护这个东西,那么对于一个不带修改的情况,答案肯定就是在对
然后你怎么维护这个东西呢?因为
单点修改、区间
这个值具体要怎么维护?我们发现在 push_up 函数中,
问题来了,操作怎么实现?很简单,修改
实现还是挺简单的嘿嘿。
::::success[code && submission]
#include<bits/stdc++.h>
#define LL long long
#define UInt unsigned int
#define ULL unsigned long long
#define LD long double
#define pii pair<int,int>
#define pLL pair<LL,LL>
#define pDD pair<LD,LD>
#define fr first
#define se second
#define pb push_back
#define isr insert
#define _i128 __int128
using namespace std;
const int N = 2e5+5;
struct node{LL x,y;}a[N];
struct query{LL opt,id,val;}q[N];
int n,Q,cnt;pLL p[N];
LL sum[N<<2],mx[N<<2];
int read(){
int su=0,pp=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')pp=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){su=su*10+ch-'0';ch=getchar();}
return su*pp;
}
int get_rk(LL val,LL id){
int rk=lower_bound(p+1,p+cnt+1,make_pair(-val,id))-p;
return rk;
}
int ls(int u){return (u<<1);}
int rs(int u){return (u<<1|1);}
void push_up(int u){
mx[u]=max(mx[ls(u)],sum[ls(u)]+mx[rs(u)]);
sum[u]=sum[ls(u)]+sum[rs(u)];return;
}
void change(int u,int l,int r,int pos,LL A,LL B){
if(l==r&&l==pos){
sum[u]=A,mx[u]=A+B;return;
}int mid=(l+r)>>1;
if(pos<=mid)change(ls(u),l,mid,pos,A,B);
else change(rs(u),mid+1,r,pos,A,B);
push_up(u);return;
}
int main(){
n=read(),Q=read();
for(int i=1;i<=n;i++)a[i].x=read();
for(int i=1;i<=n;i++)
a[i].y=read(),p[++cnt]={-a[i].y,i};
for(int i=1;i<=Q;i++){
q[i].opt=read(),q[i].id=read(),q[i].val=read();
if(q[i].opt==2)p[++cnt]={-q[i].val,q[i].id};
}sort(p+1,p+cnt+1);
cnt=unique(p+1,p+cnt+1)-p-1;
for(int i=1;i<=n;i++){
int id=get_rk(a[i].y,i);
change(1,1,cnt,id,a[i].x,a[i].y);
}
for(int i=1;i<=Q;i++){
auto [o,id,val]=q[i];
if(o==1){
int rk=get_rk(a[id].y,id);
change(1,1,cnt,rk,val,a[id].y);
a[id].x=val;
}else{
int ork=get_rk(a[id].y,id);
change(1,1,cnt,ork,0,0);
int nrk=get_rk(val,id);
change(1,1,cnt,nrk,a[id].x,val);
a[id].y=val;
}cout<<mx[1]<<"\n";
}
return 0;
}
::::
如果本篇题解对你有帮助的话,麻烦你点一个小小的赞,真是太感谢啦!