tle求条,玄关
查看原帖
tle求条,玄关
1428495
KMYC楼主2025/7/30 20:24
#define int long long
using namespace std;
const int N=1e5+5;
int n,q;
int a[N],b[N],p[N];
set<int> s;
int lowbit(int x){ return x&-x; }
void add(int x,int val){
	for(int i=x;i<=n;i+=lowbit(i)) p[i]+=val;
}
int query(int x){
	int res=0;
	for(int i=x;i;i-=lowbit(i)) res+=p[i];
	return res;
}
int get_sum(int l,int r){
	if(l>r) return 0;
	return query(r)-query(l-1);
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i],add(i,a[i]);
	for(int i=1;i<=n;i++){
		cin>>b[i];
		if(b[i]>1) s.insert(i);
	}
	cin>>q;
	while(q--){
		int op,x,y; cin>>op>>x>>y;
		if(op==1) {
			add(x,-a[x]);
			a[x]=y;
			add(x,y);
		}else if(op==2){
			if(b[x]>1) s.erase(x);
			b[x]=y;
			if(y>1) s.insert(x);
		}else{
			int ans=a[x],pos=x+1;
			while(pos<=y){
				int nxt=*s.lower_bound(pos);
				if(nxt>y){
					ans+=get_sum(pos,y);
					break;
				}
				ans+=get_sum(pos,nxt-1);
				ans=max(ans*b[nxt],ans+a[nxt]);
				pos=nxt+1;
			}
			cout<<ans<<endl;
		}
	}
	return 0;
}
2025/7/30 20:24
加载中...