HDU
来源:互联网 发布:出版社待遇知乎 编辑:程序博客网 时间:2024/06/09 16:38
题目链接:
题目大意:
数据范围:
解题思路:
详见代码:
#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>#include <set>#include <map>#include <queue>using namespace std;typedef long long LL;const int inf = 1 << 30;const LL INF = 1LL << 60;const int MaxN = 1e5;int T, t;int n, q;int ans;struct segtree{ int l, r; int sum;}tree[4 * MaxN + 5];int lazy[4 * MaxN + 5];//lazy[rt]表示rt号节点被修改的值是多少void push_up(int rt) { tree[rt].sum = tree[rt << 1].sum + tree[rt << 1 | 1].sum;}void push_down(int rt) { if(lazy[rt] > 0) { tree[rt << 1].sum = (tree[rt << 1].r - tree[rt << 1].l + 1) * lazy[rt]; tree[rt << 1 | 1].sum = (tree[rt << 1 | 1].r - tree[rt << 1 | 1].l + 1) * lazy[rt]; lazy[rt << 1] = lazy[rt]; lazy[rt << 1 | 1] = lazy[rt]; lazy[rt] = 0; //标记下放后清零 }}void Build(int rt, int l, int r) //建树{ lazy[rt] = 0; tree[rt].l = l, tree[rt].r = r; if(l == r) { tree[rt].sum = 1; return ; } int mid = (l + r) >> 1; Build(rt << 1, l, mid); Build(rt << 1 | 1, mid + 1, r); push_up(rt); }void update(int rt, int L, int R, int w){ //如果所更新的区间完全包含节点rt所管辖的区间,直接更新这个区间 //不必在往下更新,节约时间 if(L <= tree[rt].l && tree[rt].r <= R) { lazy[rt] = w; tree[rt].sum = (tree[rt].r - tree[rt].l + 1) * w; return; } push_down(rt); int mid = (tree[rt].l + tree[rt].r) >> 1; if(L <= mid) update(rt << 1, L, R, w); if(R > mid) update(rt << 1 | 1, L, R, w); push_up(rt);}/*int query(int rt, int L, int R){ if(L <= tree[rt].l && tree[rt].r <= R) return tree[rt].sum; push_down(rt); int mid = (tree[rt].l + tree[rt].r) >> 1; int res = 0; if(L <= mid) res += query(rt << 1, L, R); if(R > mid) res += query(rt << 1 | 1, L, R); return res;}*/int main(){ t = 0; scanf("%d", &T); while(T--) { ans = 0; scanf("%d", &n); scanf("%d", &q); Build(1, 1, n); for(int i = 1; i <= q; i++) { int l, r, w; scanf("%d %d %d", &l, &r, &w); update(1, l, r, w); } //ans = query(1, 1, n); //要求区间[1, n]的和,直接输出tree[1].sum不就好了!还去query啥!? //越做越煞笔! ans = tree[1].sum; printf("Case %d: The total value of the hook is %d.\n", ++t, ans); memset(tree, 0, sizeof(tree)); //注意多组清零,还因此挂了一发 } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 启动eclipse导致Tomcat的配置文件重置
- C语言fscanf和fprintf
- 手机端课程表的实现——仿超级课程表
- python中对文件、文件夹(文件操作函数)的操作
- button按钮的四种监听及实例
- HDU
- 数组最大子序列和
- Genymotion中VirtualBox无法发开虚拟设备的解决方法
- luogu1017【2000提高】进制转换(数学)
- 实现sleep函数
- Linux network I/O
- 函数对象
- 快速幂
- Qt的label显示OpenCV的Mat图像