Submission #3422665
Source Code Expand
#include <iostream> #include <algorithm> #include <vector> using namespace std; #include "variance.h" const int MAX_BIT = 1 << 17; typedef long long ll; struct BIT { int n; ll bits[MAX_BIT + 1]; //BIT() { bzero(bits, sizeof(ll) * (MAX_BIT + 1)); } void init(int _n) { n = _n; } ll sum(int x) { ll s = 0; while (x > 0) { s += bits[x]; x -= (x & -x); } return s; } void add(int x, ll v) { while (x <= n) { bits[x] += v; x += (x & -x); } } }; int N, A[MAX_BIT]; BIT ais, ai2s; void init(int n, int *a) { N = n; ais.init(n); ai2s.init(n); for (int i = 0; i < N; i++) { A[i] = a[i]; ais.add(i + 1, A[i]); ai2s.add(i + 1, A[i] * A[i]); } } int variance(int i, int j) { ll suma = ais.sum(j + 1) - ais.sum(i); ll suma2 = ai2s.sum(j + 1) - ai2s.sum(i); ll k = j + 1 - i; //printf("v(%d,%d): suma=%lld, suma2=%lld\n", i, j, suma, suma2); ll v = (k * suma2 - suma * suma) / (k * k); return (int)v; } void update(int i, int x) { ll da = x - A[i], da2 = x * x - A[i] * A[i]; A[i]=x; ais.add(i + 1, da); ai2s.add(i + 1, da2); }
Submission Info
Submission Time | |
---|---|
Task | D - 分散 (Variance) |
User | luogu_bot5 |
Language | C++ (GCC 5.4.1) |
Score | 0 |
Code Size | 1222 Byte |
Status | IE |