社区讨论
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 条回复,欢迎继续交流。
正在加载回复...