社区讨论

40pts超时求调

P4145上帝造题的七分钟 2 / 花神游历各国参与者 2已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@mm2xbk4l
此快照首次捕获于
2026/02/26 11:48
2 周前
此快照最后确认于
2026/02/26 15:28
2 周前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define endl '\n'
using namespace std;
const int N=1e6+5;
int n,m;
int a[N];
int maxi[4*N],sum[4*N];
void pushup(int x){
    maxi[x]=max(maxi[2*x],maxi[2*x+1]);
    sum[x]=sum[2*x]+sum[2*x+1];
}
void build(int x,int l,int r){
    if(l==r){
        sum[x]=a[l];
        maxi[x]=a[l];
        return ;
    }
    int mid=(l+r)/2;
    build(2*x,l,mid);
    build(2*x+1,mid+1,r);
    pushup(x);
}
void update(int x,int l,int r,int L,int R){
    if(l>R||L>r){
		return ;
	}
	if(L<=l&&r<=R&&l==r){
		sum[x]=sqrt(sum[x]);
        maxi[x]=sum[x]; 
		return ;
	}
	int mid=(l+r)/2;
	update(2*x,l,mid,L,R);
	update(2*x+1,mid+1,r,L,R);
	pushup(x);
}
int query(int x,int l,int r,int L,int R){
    if(l>R||L>r){
		return 0;
	}
	if(L<=l&&r<=R){
		return sum[x];
	}
	int mid=(l+r)/2;
	return query(2*x,l,mid,L,R)+query(2*x+1,mid+1,r,L,R);
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    build(1,1,n);
    cin>>m;
    while(m--){
        int op,l,r;
        cin>>op>>l>>r;
        if(l>r){
            swap(l,r);
        }
        if(op==0){
            update(1,1,n,l,r);
        }else{
            cout<<query(1,1,n,l,r)<<endl;
        }
    }
    return 0;
}
hack过了,前四个点多了,后六个点Tl

回复

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

正在加载回复...