玄关求调
查看原帖
玄关求调
632409
Dream_not_found楼主2025/8/4 00:28

Sub1 AC4,TLE1,WA5

这是代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<deque>
#include<map>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e5+10,M=1e5+10;
const double PI=acos(-1.0);
const double eps=1e-6;
const ll mod=1e9+7;
const int INF=0x3f3f3f3f;

inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return x*f;
}

ll n,m;
ll a[N];
struct node{
	int l,r;
	ll sum,maxn;
}t[4*N];
void pushup(int p){
	int l=p<<1,r=p<<1|1;
	t[p].sum=t[l].sum+t[r].sum;
	t[p].maxn=max(t[l].maxn,t[r].maxn);
}
void buildtree(int p,int l,int r){
	t[p].l=l,t[p].r=r;
	if(l==r){
		t[p].sum=t[p].maxn=a[l];
		return;
	}
	int mid=(l+r)>>1;
	buildtree(p<<1,l,mid);
	buildtree(p<<1|1,mid+1,r);
	pushup(p);
}
void update(int p,int l,int r){
	if(t[p].l==t[p].r){
		t[p].sum=sqrt(t[p].sum);
		t[p].maxn=sqrt(t[p].maxn);
		return;
	}
	int mid=(t[p].l+t[p].r)>>1;
	if(l<=mid&&t[p<<1].sum>1)update(p<<1,l,r);
	if(mid<r&&t[p<<1|1].sum>1)update(p<<1|1,l,r);
	pushup(p);
}
ll query(int p,int l,int r){
	if(l<=t[p].l&&t[p].r<=r)return t[p].sum;
	int mid=(t[p].l+t[p].r)>>1;
	ll ans=0;
	if(l<=mid)ans+=query(p<<1,l,r);
	if(mid<r)ans+=query(p<<1|1,l,r);
	return ans;
}
int main(){
//	freopen("xxx.in","r",stdin);
//	freopen("xxx.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
	}
	buildtree(1,1,n);
	m=read();
	while(m--){
		int op,l,r;
		op=read(),l=read(),r=read();
		if(l>r)swap(l,r);
		if(op==0)update(1,l,r);
		else printf("%lld\n",query(1,l,r));
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}

马蜂丑陋,还请见谅

2025/8/4 00:28
加载中...