hdu 1698

来源:互联网 发布:php 获取项目根目录 编辑:程序博客网 时间:2024/06/06 00:49
#include <iostream>#include <stdio.h>#define MAX_N 100001using namespace std;struct node{    int left, right, c;} tt[MAX_N * 4];void build(int left, int right, int index) {    tt[index].left = left;    tt[index].right = right;    tt[index].c = 1;    if (left == right) return;    int mid = (left + right) / 2;    build(left, mid, index * 2);    build(mid + 1, right, index * 2 + 1);}void update(int index, int left, int right, int c) {    if (tt[index].left >= left && tt[index].right <= right) {        tt[index].c = c;        return;    }    if (tt[index].c != -1) {        tt[index * 2].c = tt[index * 2 + 1].c = tt[index].c;        tt[index].c = -1;    }    int mid = (tt[index].left + tt[index].right) / 2;    if (mid >= left) update(index * 2, left, right, c);    if (mid < right) update(index * 2 + 1, left, right, c);}int solve(int index) {    if (tt[index].c != -1) return tt[index].c * (tt[index].right - tt[index].left + 1);    return solve(index * 2) + solve(index * 2 + 1);}int main() {    int t, icase, n, m, i, a, b, c;    scanf("%d", &icase);    t = 0;    while (icase--) {        scanf("%d%d", &n, &m);        build(1, n, 1);        for (i = 0; i < m; i++) {            scanf("%d%d%d", &a, &b, &c);            update(1, a, b, c);        }        printf("Case %d: The total value of the hook is %d.\n", ++t, solve(1));    }    return 0;}