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;}