mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
85716f1888
From http://acm.hdu.edu.cn/discuss/problem/post/reply.php?postid=28786&messageid=1&deep=0
60 lines
1.3 KiB
C++
60 lines
1.3 KiB
C++
#include<cstdio>
|
|
#include<algorithm>
|
|
#include<iostream>
|
|
using namespace std;
|
|
#define lchild rt << 1, l, m
|
|
#define rchild rt << 1 | 1, m + 1, r
|
|
const int N=400010;
|
|
int tree[N],lazy[N],t,ans=1,L,R,delta,n,m;
|
|
|
|
//区间求和
|
|
void push_up(int rt){
|
|
tree[rt]=tree[rt << 1]+tree[rt << 1 | 1];
|
|
}
|
|
|
|
void push_down(int rt, int len) {
|
|
if(lazy[rt])
|
|
{
|
|
lazy[rt << 1]=lazy[rt << 1 | 1] = lazy[rt];
|
|
tree[rt << 1] = lazy[rt << 1] * (len - (len >> 1));
|
|
tree[rt << 1 | 1] = lazy[rt << 1 | 1] * (len >> 1);
|
|
lazy[rt] = 0;
|
|
}
|
|
}
|
|
|
|
void build(int rt = 1, int l = 1, int r = n) {
|
|
lazy[rt]=0;
|
|
if (l == r) { tree[rt]=1; return; }//注意对树的初始赋值
|
|
int m = (l + r) >> 1;
|
|
build(lchild); build(rchild);
|
|
push_up(rt);
|
|
}
|
|
|
|
void update(int L, int R, int delta, int rt = 1, int l = 1, int r = n) {
|
|
if (L <= l && r <= R) {
|
|
tree[rt] = delta * (r - l + 1);//数据更新
|
|
lazy[rt] = delta;
|
|
return;
|
|
}
|
|
push_down(rt, r - l + 1);
|
|
int m = (l + r) >> 1;
|
|
if (L <= m) update(L, R, delta, lchild);
|
|
if (R > m) update(L, R, delta, rchild);
|
|
push_up(rt);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
for(scanf("%d",&t);t--;)
|
|
{
|
|
scanf("%d%d",&n,&m);
|
|
build();
|
|
for(int i=0;i<m;i++)
|
|
{
|
|
scanf("%d%d%d",&L,&R,&delta);
|
|
update(L,R,delta);
|
|
}
|
|
printf("Case %d: The total value of the hook is %d.\n",ans++,tree[1]);
|
|
}
|
|
}
|