Codeforces 444C DZY Loves Colors(线段树)

题目大意:Codeforces 444C DZY Loves Colors

题目大意:两种操作,1是修改区间上l到r上面德值为x,2是询问l到r区间总的修改值。

解题思路:线段树模板题。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>

using namespace std;
const int maxn = 5*1e5;
typedef long long ll;

ll s[maxn], del[maxn], mark[maxn];

void build (int u, int l, int r) {
    if (l < r) {
        int mid = (l + r)/2;
        build(u*2, l, mid);
        build(u*2+1, mid+1, r);
    } else
        mark[u] = l;
}

ll query (int u, int l, int r, int x, int y) {
    if (y < l || x > r)
        return 0;

    if (x <= l && r <= y)
        return s[u];

    int mid = (l + r) / 2;
    ll L = query(u*2, l, mid, x, y);
    ll R = query(u*2+1, mid+1, r, x, y);
    return L + R + max(0, min(r, y) - max(l, x) + 1) * del[u];
}

void clear (int u, int l, int r, int z) {
    if (mark[u]) {
        del[u] += abs(mark[u]-z);
        s[u] += 1LL * (r-l+1) * abs(mark[u]-z);
        mark[u] = 0;
    } else {

        if (l == r)
            return;

        int mid = (l + r) / 2, lc = u*2, rc = u*2+1;
        clear(lc, l, mid, z);
        clear(rc, mid+1, r, z);

        s[u] = s[lc] + s[rc] + 1LL * (r-l+1) * del[u];
    }
}

void modify (int u, int l, int r, int x, int y, int z) {
    //    printf("%d %d %d %d %d %d\n", u, l, r, x, y, z);
    if (y < l || x > r)
        return;

    if (x <= l && r <= y) {
        clear(u, l, r, z);
        mark[u] = z;
        return;
    }

    int mid = (l + r) / 2, lc = u*2, rc = u*2+1;
    if (mark[u]) {
        mark[lc] = mark[rc] = mark[u];
        mark[u] = 0;
    }
    modify(lc, l, mid, x, y, z);
    modify(rc, mid+1, r, x, y, z);
    s[u] = s[lc] + s[rc] + 1LL * (r-l+1) * del[u];
}

int main () {
    int n, m;
    scanf("%d%d", &n, &m);
    /*
       memset(sum, 0, sizeof(sum));
       memset(del, 0, sizeof(del));
       memset(mark, 0, sizeof(mark));
       */

    build(1, 1, n);

    int type, x, y, z;;
    for (int i = 0; i < m; i++) {
        scanf("%d%d%d", &type, &x, &y);
        if (type == 1) {
            scanf("%d", &z);
            modify(1, 1, n, x, y, z);
        } else
            printf("%lld\n", query(1, 1, n, x, y));
    }
    return 0;
}

Codeforces 444C DZY Loves Colors(线段树),布布扣,bubuko.com

时间: 2024-07-30 13:50:06

Codeforces 444C DZY Loves Colors(线段树)的相关文章

codeforces - 444c DZY Loves Colors(线段树+染色)

C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output DZY loves colors, and he enjoys painting. On a colorful day, DZY gets a colorful ribbon, which consists of n units (they

Codeforces 444C DZY Loves Colors 水线段树

题目链接:点击打开链接 水.. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <math.h> #include <set> #include <vector> #include <map> using namespace std; #define ll long long #defi

codeforces 444 C. DZY Loves Colors(线段树)

题目大意: 1 l r x操作 讲 [l,r]上的节点涂成x颜色,并且每个节点的值都加上 |y-x| y为涂之前的颜色 2 l r  操作,求出[l,r]上的和. 思路分析: 如果一个区间为相同的颜色.那么我们才可以合并操作. 所以我们之前找相同的区间就好. 但是问题是如何合并操作. 那么我们定义一个val  表示这个区间每个位置上应该加上的值. pushdown 的时候这个值是可以相加的. #include <cstdio> #include <iostream> #includ

CodeForces 444C DZY Loves Colors

题意: 一段区间a一开始是1.2.3.4--n这样的  每次1操作可以将[l,r]覆盖成x  同时得到abs(a[i]-x)的价值  2操作查询[l,r]的价值 思路: 线段树  又是一道加深线段树理解的题 操作2是简单的求和  线段树基本操作  难点在操作1 用cov表示该区间的值(如果为0说明是混合区间)  用val表示该区间的价值和 那么在更新时就不仅仅是找到 tree[i].l==l&&tree[i].r==r 就停止了  而是继续向下递归  直到一段区间的cov>0才结束

CodeForces 444C. DZY Loves Physics(枚举+水题)

转载请注明出处:http://blog.csdn.net/u012860063/article/details/37509207 题目链接:http://codeforces.com/contest/445/problem/C DZY Loves Physics DZY loves Physics, and he enjoys calculating density. Almost everything has density, even a graph. We define the densi

Cf 444C DZY Loves Colors(线段树)

DZY loves colors, and he enjoys painting. On a colorful day, DZY gets a colorful ribbon, which consists of n units (they are numbered from 1 to n from left to right). The color of thei-th unit of the ribbon is i at first. It is colorful enough, but w

Cf 444C DZY Loves Colors(段树)

DZY loves colors, and he enjoys painting. On a colorful day, DZY gets a colorful ribbon, which consists of n units (they are numbered from 1 to n from left to right). The color of thei-th unit of the ribbon is i at first. It is colorful enough, but w

CodeForces 445E DZY Loves Colors

DZY Loves Colors Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Original ID: 445E64-bit integer IO format: %I64d      Java class name: (Any) DZY loves colors, and he enjoys painting. On a colorful day, DZY gets a

codeforces 446C DZY Loves Fibonacci Numbers(数学 or 数论+线段树)

In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence relation F1 = 1; F2 = 1; Fn = Fn - 1 + Fn - 2 (n > 2). DZY loves Fibonacci numbers very much. Today DZY gives you an array consisting of n integers: a1, a2, ...,