题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698
裸的区间更新。
直接代码。
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <stack>
#include <string>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn=111111;
const int INF=0x7fffffff;
const int mod=1e7+7;
#define LSON l,m,rt<<1
#define RSON m+1,r,rt<<1|1
#define ESP 1e-7
int sum[maxn<<2],lazy[maxn<<2];
void push_up(int rt) {
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void push_down(int rt, int len) {
if(lazy[rt]) {
lazy[rt<<1]=lazy[rt<<1|1]=lazy[rt];
sum[rt<<1]=(len-(len>>1))*lazy[rt];
sum[rt<<1|1]=(len>>1)*lazy[rt];
lazy[rt]=0;
}
}
void build(int l, int r, int rt) {
lazy[rt]=0;
sum[rt]=1;
if(l==r) return ;
int m=(l+r)>>1;
build(LSON);
build(RSON);
push_up(rt);
}
void update(int ll, int rr, int c, int l, int r, int rt) {
if(ll<=l && r<=rr) {
lazy[rt]=c;
sum[rt]=(r-l+1)*c;
return ;
}
push_down(rt, r-l+1);
int m=(l+r)>>1;
if(ll<=m) update(ll, rr, c, LSON);
if(rr>m) update(ll, rr, c, RSON);
push_up(rt);
}
int main() {
int t,n,x,y,z,q;
scanf("%d", &t);
for(int cc=1;cc<=t;cc++) {
scanf("%d", &n);
build(1, n, 1);
scanf("%d", &q);
while(q--) {
scanf("%d%d%d", &x, &y, &z);
update(x, y, z, 1, n, 1);
}
printf("Case %d: The total value of the hook is %d.\n", cc, sum[1]);
}
return 0;
}