hiho week 22 register

Ended

Participants:196

Verdict:Accepted
Score:100 / 100
Submitted:2014-12-01 12:02:33

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<cstdio>
#include<algorithm>
using namespace std;
int N;
int M;
struct Node{
    int value;
    int mod;
    bool tag;//01
}tree[300010];
int weight[100010];
void update_0(int cur,int s,int e,int l,int r,int chg){//[s,e] //
    if(s>=l&&e<=r){//tag01
        tree[cur].value+=chg*(e-s+1);
        tree[cur].mod+=chg;
    }
    else{
        int lmid=(s+e-1)/2;
        int rmid=(s+e+1)/2;
        if(tree[cur].tag==0){
            tree[cur*2+1].mod+=tree[cur].mod;
            tree[cur*2+2].mod+=tree[cur].mod;
            tree[cur*2+1].value+=tree[cur].mod*(lmid-s+1);
            tree[cur*2+2].value+=tree[cur].mod*(e-rmid+1);
        }
        else{
            tree[cur*2+1].tag=1;
            tree[cur*2+2].tag=1;
            tree[cur*2+1].mod=tree[cur].mod;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX