社区讨论

``` 萌新刚学\dfrac{(1)_2}{(66ccff)}天OI,线段树求条

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

讨论操作

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

当前回复
12 条
当前快照
1 份
快照标识符
@lob9th6m
此快照首次捕获于
2023/10/29 17:30
2 年前
此快照最后确认于
2023/11/17 23:02
2 年前
查看原帖
萌新刚学20120712+(1)2(0x66ccff)16+(0712)82012^{-0712}+\dfrac{(1)_2}{(0x66ccff)_{16}+(0712)_8}天OI,线段树求条
CPP
#include<bits/stdc++.h>
#define mid (l+r)/2
#define lC q<<1
#define rC q<<1|1
#define int long long
#define INF 0x66ccff0712
#define endl "\n"
#define maxm 0x66ccff
#define maxn 0x6cf 
#define void inline void
using namespace std;
inline int read(){
    int s = 0,w = 1;char ch = getchar();
    while(ch<'0'||ch>'9'){ if(ch ==  '-') w = -1;ch = getchar();}
    while(ch>='0'&&ch<='9'){ s = s*10+ch-'0';ch = getchar();}
    return s*w;
}
int n,m;
bool a[maxm];
struct node{
	long long l,r;
    long long lazy,dat;
}t[maxm];
void build(int q,int l,int r){
	t[q].l=l;
	t[q].r=r;
	if(l==r){
		t[q].dat=a[l];
		return;
	}
	build(lC,l,mid);
	build(rC,mid+1,r);
	t[q].dat=t[lC].dat+t[rC].dat;
}
void change(int q,int l,int r){
	if(t[q].l>r||t[q].r<l) 
        return;
	if(t[q].l==l||t[q].r==r){
		t[q].dat=sqrt(t[q].dat);
		return;
	}
	change(lC,l,r);
	change(rC,l,r);
	t[q].dat=t[lC].dat+t[rC].dat;
}
int ask(int q,int l,int r){
    if(t[q].l>r || t[q].r<l) 
        return 0;
	if(t[q].l>=l && t[q].r<=r) 
        return t[q].dat;
	return ask(lC,l,r)+ask(rC,l,r); 
}
signed main(){
	int n=read(),m;
    for(int i=1;i<=n;i++) a[i]=read();
	build(1,1,n);
    m=read()
	for(int i=1;i<=m;i++){
		int opt=read(),l=read(),r=read();
        if(r<l) 
			swap(l,r);
		if(opt==0)
            for(int j=l;j<=r;j++){
                if(a[j]<=1) 
                    continue;
			    else 
                    change(1,j,j);
            }
		else 
			cout<<ask(1,l,r)<<endl;
	}
}

回复

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

正在加载回复...