题目链接:
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 9 #define maxn 13005010 #define lson l,mid,u<<111 #define rson mid+1,r,u<<1|112 using namespace std;13 14 const int INF = 0x3f3f3f;15 16 int seg[maxn<<2];17 int pau[maxn<<2];18 19 void Push_UP(int u){20 seg[u] =seg[u<<1] + seg[u<<1|1]; 21 }22 void Push_Down(int l,int r,int u){23 if(pau[u]){24 int mid = (l + r)/2; 25 pau[u<<1] = pau[u<<1|1] = pau[u];26 seg[u<<1] = (mid - l + 1) * pau[u];27 seg[u<<1|1] = (r - mid) * pau[u];28 pau[u] = 0;29 }30 }31 void build(int l,int r,int u){32 if(l == r){33 seg[u] = 1;34 return;35 }36 int mid = (l + r)/2; 37 build(lson);38 build(rson);39 Push_UP(u);40 }41 void Update(int L,int R,int num,int l,int r,int u){42 if(L <= l && r <= R){ // 这个地方要注意!! 43 pau[u] = num; 44 seg[u] = num * (r - l + 1); 45 return;46 }47 Push_Down(l,r,u); 48 int mid = (l + r)/2; 49 if(L <= mid) Update(L,R,num,lson);50 if(R > mid) Update(L,R,num,rson);51 Push_UP(u);52 }53 54 int main()55 {56 if(freopen("input.txt","r",stdin)== NULL) {printf("Error\n"); exit(0);}57 int T;58 cin>>T;59 for(int t=1;t<=T;t++){60 int N,Q;61 cin>>N;62 build(1,N,1);63 cin>>Q; 64 memset(pau,0,sizeof(pau));65 while(Q--){66 int X,Y,Z;67 scanf("%d%d%d",&X,&Y,&Z);68 Update(X,Y,Z,1,N,1);69 }70 printf("Case %d: The total value of the hook is %d.\n",t,seg[1]);71 }72 }