hihoCoder Challenge 5 register

Ended

Participants:319

Verdict:Accepted
Submitted:2014-11-09 20:32:38

Lang:G++

Edit
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
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
using namespace std;
int T;
int n[100005];
int d_min[100005][20];
int d_max[100005][20];
void RMQ_init()
{
    for(int i = 1; i <= T; ++i) {
        d_min[i][0] = i;
        d_max[i][0] = i;
    }
    for(int j = 1; (1<<(j)) <= T; ++j) {
        for(int i = 1; i + (1<<j) - 1 <= T; ++i)
        {
            d_min[i][j] = n[d_min[i][j-1]] < n[d_min[i+(1<<(j-1))][j-1]] ? d_min[i][j-1] : d_min[i+(1<<(j-1))][j-1];
            d_max[i][j] = n[d_max[i][j-1]] > n[d_max[i+(1<<(j-1))][j-1]] ? d_max[i][j-1] : d_max[i+(1<<(j-1))][j-1];   
            //printf("start %d length %d max %d min %d\n", i, 1 << j, d_max[i][j], d_min[i][j]);
            //printf("i %d j %d T %d i + (1<<(j-1)) %d\n", i, j, T, i + (1<<(j-1)));
        }
    }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX