社区讨论

70分代码求调

P2122还教室参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@m06k3tez
此快照首次捕获于
2024/08/23 18:16
2 年前
此快照最后确认于
2025/11/04 22:37
4 个月前
查看原帖
WA#7 8 9 10 11 13
CPP
#include <bits/stdc++.h>
#define lson id<<1,l,mid
#define rson id<<1|1,mid+1,r
#define ls id<<1
#define rs id<<1|1
#define int long long
using namespace std;
const int MAXN=1e5+1;
int n,m;
struct st{
	int l,r;
	int sum,pfsum,add;
}tree[MAXN<<2];

inline void up(int id){
	tree[id].pfsum=tree[ls].pfsum+tree[rs].pfsum;
	tree[id].sum=tree[ls].sum+tree[rs].sum;
}

inline void down(int id){
	if(tree[id].add){
		tree[ls].add+=tree[id].add;
		tree[rs].add+=tree[id].add;
		
		tree[ls].pfsum+=( (2 * tree[id].add) * tree[ls].sum) + ( (tree[ls].r - tree[ls].l + 1) * tree[id].add * tree[id].add);
		tree[rs].pfsum+=( (2 * tree[id].add) * tree[rs].sum) + ( (tree[rs].r - tree[rs].l + 1) * tree[id].add * tree[id].add);
		
		tree[ls].sum+=(tree[ls].r-tree[ls].l+1)*tree[id].add;
		tree[rs].sum+=(tree[rs].r-tree[rs].l+1)*tree[id].add;
		
		tree[id].add=0;
	}
}

inline void build(int id,int l,int r){
	tree[id].l=l;tree[id].r=r;
	if(l==r){
		cin>>tree[id].sum;
		tree[id].pfsum=tree[id].sum*tree[id].sum;
		return ;
	}
	int mid=l+r>>1;
	build(lson);build(rson);
	up(id);
}

inline void update(int id,int l,int r,int L,int R,double W){
	if(L<=l&&r<=R){
		tree[id].add+=W;
		tree[id].pfsum+=( (2 * W) * tree[id].sum) + ( (r - l + 1) * W * W);
		tree[id].sum+=(r - l + 1)*W;
		return ;
	}
	down(id);
	int mid=l+r>>1;
	if(L<=mid) update(lson,L,R,W);
	if(R>mid) update(rson,L,R,W);
	up(id);
}

inline double query_sum(int id,int l,int r,int L,int R){
	if(l>R||r<L) return 0;
	if(L<=l&&r<=R) return tree[id].sum;
	down(id);
	int mid=l+r>>1;
	return query_sum(lson,L,R)+query_sum(rson,L,R);
}

inline double query_pfsum(int id,int l,int r,int L,int R){
	if(l>R||r<L) return 0;
	if(L<=l&&r<=R) return tree[id].pfsum;
	down(id);
	int mid=l+r>>1;
	return query_pfsum(lson,L,R)+query_pfsum(rson,L,R);
}

inline void cs(int id,int l,int r){
	if(l==r){
		cout<<"cs: "<<l<<' '<<tree[id].sum<<' '<<tree[id].pfsum<<endl;
		return ;
	}
	int mid=l+r>>1;
	cs(lson);cs(rson);
}

signed main(){
	cin>>n>>m;
	build(1,1,n);
	while(m--){
		int op,x,y;
		int k;
		cin>>op>>x>>y;
		if(op==1){
			cin>>k;
			update(1,1,n,x,y,k);
		} 
		if(op==2){
			int a=query_sum(1,1,n,x,y),b=(y-x+1);
			int c=__gcd(a,b);
			printf("%lld/%lld\n",a/c,b/c);
		}
		if(op==3){
			int p1,p2,a1=query_sum(1,1,n,x,y),b1=(y-x+1),a2=query_pfsum(1,1,n,x,y),b2=(y-x+1);
			a1*=a1;b1*=b1;
			int c1=__gcd(a1,b1),c2=__gcd(a2,b2);
			a1/=c1,b1/=c1;a2/=c2;b2/=c2;
			p1=a2*b1-a1*b2;
			p2=b1*b2;
			int pp=__gcd(p1,p2);
			printf("%lld/%lld\n",p1/pp,p2/pp);
//			cs(1,1,n);
//			cout<<"\n\n\n---------------------\n\n\n"<<pfsum<<' '<<sum<<endl;
		}
	}
}

回复

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

正在加载回复...