1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//주어진 벡터 a의 부분합을 계산한다.
vector<int> partialSum(const vector<int>& a) {
    vector<int> ret(a.size());
    ret[0= a[0];
    for (int i = 1; i < a.size(); i++)
        ret[i] = ret[i - 1+ a[i];
    return ret;
}
 
int rangeSum(const vector<int>&psum, int a, int b) {
    if (a == 0return psum[b];
    return psum[b] - psum[a - 1];
 
}
 
//A[]의 제곱의 부분 합 벡터 sqpsum,A[]의 부분 합 벡터 psum이 주어질 때
//A[a...b]의 분산을 반환한다.
double variance(const vector<int>& sqpsum, const vector<int>&psum, int a, int b) {
    //우선 해당 구간의 평균을 계산한다.
    double mean = rangeSum(psum, a, b) / double(b - a + 1);
    double ret = rangeSum(sqpsum, a, b) - 2 * mean*rangeSum(psum, a, b)
        + (b - a + 1)*mean*mean;
 
    return ret / (b - a + 1);
}
 
 
//어떤 2차원 배열 A[][]의 부분합 psum[][]이 주어질 때,
//A[y1,x1]과 A[y2,x2]를 양 끝으로 갖는 부분 배열의 합을 반환한다.
int gridSum(const vector<vector<int> >& psum, int y1, int x1, int y2, int x2) {
    int ret = psum[y2][x2];
    if (y1 > 0) ret -= psum[y1 - 1][x2];
    if (x1 > 0) ret -= psum[y2][x1 - 1];
    if (y1 > 0 && x1 > 0) ret += psum[y1 - 1][x1 - 1];
    return ret;
}
cs


'알고리즘 > 구현' 카테고리의 다른 글

간단한 기본 다익스트라 구현  (0) 2019.05.12
플로이드 최단경로 알고리즘  (0) 2019.03.25
BFS 구현  (0) 2019.01.07

+ Recent posts