0tps玄关求调(大抵是精度问题怎么调都过不了)
  • 板块P1471 方差
  • 楼主Xuan3579
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/26 19:26
  • 上次更新2024/7/26 20:55:25
查看原帖
0tps玄关求调(大抵是精度问题怎么调都过不了)
1286488
Xuan3579楼主2024/7/26 19:26
#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 33;

#define mid  ((l + r) >> 1)
#define lx(x) (x << 1)
#define rx(x) (x << 1 | 1)

int n, m;
double t[N << 2], a[N], w[N << 2], w1[N << 2];

void push_up(int u){
	w[u] = w[lx(u)] + w[rx(u)];
	w1[u] = w1[lx(u)] + w1[rx(u)];
}

int build(int u, int l, int r){
	if(l == r)return w[u] = a[l], w1[u] = a[l] * a[l];
	build(lx(u), l, mid); build(rx(u), mid + 1, r);
	push_up(u);
	return 0;
}

void addt(int u, int l, int r, int k){
	w1[u] += w[u] * 2 * k + (r - l + 1) * k * k; 
	t[u] += k;
	w[u] += (r - l + 1) * k;
}

void push_down(int u, int l, int r){
	if(!t[u])return ;
	addt(lx(u), l, mid, t[u]); addt(rx(u), mid + 1, r, t[u]);
	t[u] = 0;
}

void add(int u, int l, int r, int L, int R,	double k){
	if(l > R || r < L)return ;
	if(l >= L && r <= R)return addt(u, l, r, k);
	push_down(u, l ,r);
	add(lx(u), l, mid, L, R, k);add(rx(u), mid + 1, r, L, R, k);
	push_up(u);
}

double ask(int u, int l, int r, int L, int R){
	if(l > R || r < L)return 0;
	if(l >= L && r <= R)return w[u];
	push_down(u, l ,r);
	return ask(lx(u), l, mid, L, R) + ask(rx(u), mid + 1, r, L, R);
}

double ask1(int u, int l, int r, int L, int R){
	if(l > R || r < L) return 0;
	if(l >= L && r <= R) return w1[u];
	push_down(u, l, r);
	return (ask1(lx(u), l, mid, L, R) + ask1(rx(u), mid + 1, r, L, R)) / (r - l + 1);
}

int main(){
	cin >> n >> m;
	for(int i = 1; i <= n; i++)cin >> a[i];
	build(1, 1, n);
	for(int i = 1; i <= m; i++){
		int op, x, y;
		double k;
		cin >> op >> x >> y;
		if(op == 1){
			cin >> k;
			add(1, 1, n, x, y, k);
		}
		if(op == 2){
			printf("%.4f\n", (ask(1, 1, n, x, y)) / (y - x + 1));
		}
		if(op == 3){
			double sum1 = ask1(1, 1, n, x, y) / (y - x + 1), sum2 = ask(1, 1, n, x, y) / (y - x + 1);
			double ans = sum1 - sum2 * sum2;
			printf("%.4f\n", ans);
		}
	} 
	return 0;
}
2024/7/26 19:26
加载中...