Submission #3564850
Source Code Expand
#include "variance.h" #include <vector> #define REP(i, n) for(int i = 0; i < (int)(n); ++i) using namespace std; typedef long long ll; template<typename T> struct BIT { vector<T> data; BIT(int n) { int sz = 1; while(sz < n) sz <<= 1; data.assign(sz+1, 0); } T sum(int ed) const { T res(0); for(; ed > 0; ed &= ed-1) res += data[ed]; return res; } T sum(int bg, int ed) const { return sum(ed) - sum(bg); } void add(int i, const T& x) { for(++i; i < (int)data.size(); i += i & -i) data[i] += x; } }; int N; int *A; BIT<ll> ex(0); BIT<ll> ex2(0); void init(int n, int *a) { ex = BIT<ll>(n); ex2 = BIT<ll>(n); REP(i, n){ ex.add(i, a[i]); ex2.add(i, a[i]*a[i]); } N = n; A = a; } int variance(int i, int j) { double k = j - i + 1; double tmp = ex.sum(i, j+1) / k; return (int)(ex2.sum(i, j+1)/k - tmp*tmp); } void update(int i, int x_) { ll x = x_; ex.add(i, x - A[i]); ex2.add(i, x*x - A[i]*A[i]); A[i]=x; }
Submission Info
Submission Time | |
---|---|
Task | D - 分散 (Variance) |
User | luogu_bot4 |
Language | C++ (GCC 5.4.1) |
Score | 0 |
Code Size | 1044 Byte |
Status | IE |