玄关全R自闭代码
查看原帖
玄关全R自闭代码
623254
Soul_direction楼主2024/7/6 11:04

本地能过,开 freopen 就炸,快读快写没问题,就是自闭(厌 freefree,openopen)。

#pragma gcc optimize(2)
#include <iostream>
#include <algorithm>
#include <string>
#define int long long
#define maxn 1000010
#define inf 2147483647
using namespace std;
int n,q,l,r;
int tree[4*maxn],a[maxn];
char op;
void buildtree(int lowbit,int l,int r){
	if(l==r)tree[lowbit]=a[l];
	int mid=(l+r)>>1;
	buildtree(lowbit*2,l,mid);
	buildtree(lowbit*2+1,mid+1,r);
	tree[lowbit]=max(tree[lowbit*2],tree[lowbit*2+1]);
}
int find(int lowbit,int l,int r,int b,int e){
	if(b<=l&&r<=e)return tree[lowbit];
	int mid=(l+r)>>1,ans=-1e18;
	if(b<=mid)ans=max(ans,find(lowbit*2,l,mid,b,e));
	if(e>mid)ans=max(ans,find(lowbit*2+1,mid+1,r,b,e));
	return ans;
}
void turn(int lowbit,int l,int r,int b,int e,int tmp){
	if(l==r)tree[lowbit]=tmp;
	int mid=(l+r)>>1;
	if(b<=mid)turn(lowbit*2,l,mid,b,e,tmp);
	if(e>mid)turn(lowbit*2+1,mid+1,r,b,e,tmp);
	tree[lowbit]=max(tree[lowbit*2],tree[lowbit*2+1]);
}
void add(int lowbit,int l,int r,int b,int e,int tmp){
	if(l==r)tree[lowbit]+=tmp;
	int mid=(l+r)>>1;
	if(b<=mid)add(lowbit*2,l,mid,b,e,tmp);
	if(e>mid)add(lowbit*2+1,mid+1,r,b,e,tmp);
	tree[lowbit]=max(tree[lowbit*2],tree[lowbit*2+1]);
}
inline int read(){
    int x=0,f; char ch=0;
    while(!isdigit(ch)) f=(ch=='-'?-1:1),ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return x*f;
}
inline void print(int x){
    if(x<0) x=-x,putchar('-');
    if(x>9) print(x/10);
    putchar(x%10+48);
}
inline void write(int x){print(x);putchar('\n');}
signed main(){
	n=read(),q=read();
	for(int i=1;i<=n;i++)a[i]=read();
	buildtree(1,1,n);
	while(q--){
		cin>>op;
		int s=read(),f=read();
		int x;
		if(op=='1'){
			x=read();
			turn(1,1,n,s,f,x);
		}else if(op=='2'){
			x=read();
			add(1,1,n,s,f,x);
		}else{
			write(find(1,1,n,s,f));
		}
	}
	return 0;
}
2024/7/6 11:04
加载中...