zoukankan      html  css  js  c++  java
  • 线段树区间加板子

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<queue>
    #include<string>
    using namespace std;
    #define maxn 101000
    #define maxq 101000
    int Sum[maxn << 2];
    int Add[maxn << 2];
    int n, t, q;
    int a, b, c;
    int ans;
    
    void pushup(int rt) {
    	Sum[rt] = Sum[rt << 1] + Sum[rt << 1 | 1];
    }
    void pushdown(int rt,int ln,int rn) {
    	if (Add[rt]) {
    		Add[rt << 1] = Add[rt << 1 | 1] = Add[rt];
    		Sum[rt << 1] = ln*Add[rt];
    		Sum[rt << 1 | 1] = rn*Add[rt];
    		Add[rt] = 0;
    	}
    }
    void build(int l, int r, int rt) {
    	Add[rt] = 0;
    	Sum[rt] = 1;
    	if (l == r) { return; }
    	int m = (l + r) >> 1;
    	build(l, m, rt << 1);
    	build(m + 1, r, rt << 1 | 1);
    }
    void update(int a, int b, int c, int l, int r, int rt) {
    	//cout << l << " " << r << " " << rt << endl;
    	if (a <= l&&b >= r) {
    		Add[rt] = c;
    		Sum[rt] = c*(r - l + 1);
    		return;
    	}
    	int m = (r + l) >> 1;
    	pushdown(rt, m - l + 1, r - m);
    	if (a <= m)update(a, b, c, l, m, rt << 1);
    	if (b > m)update(a, b, c, m + 1, r, rt << 1 | 1);
    	pushup(rt);
    }
    int main() {
    	scanf("%d", &t);
    	int cnt = 0;
    	while (t--) {
    		cnt++;
    		scanf("%d", &n);
    		build(1, n, 1);
    		scanf("%d", &q);
    		while (q--) {
    			scanf("%d %d %d", &a, &b, &c);
    			update(a, b, c, 1, n, 1);
    		}
    		ans = 0;
    		printf("Case %d: The total value of the hook is %d.
    ", cnt, Sum[1]);
    	}
    }

  • 相关阅读:
    java web设置全局context参数
    tomcat ider配置
    JDBC Druid式link
    JDBC c3p0
    JDBCUtils 工具类
    顺序栈
    线性表链式存储结构的实现的使用
    线性表顺序存储结构的实现和运用
    Mat类下的data指针的深刻理解
    Mat类下几个属性的理解
  • 原文地址:https://www.cnblogs.com/Drenight/p/8611215.html
Copyright © 2011-2022 走看看