P2184 贪婪大陆

Posted TURNINING

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2184 贪婪大陆相关的知识,希望对你有一定的参考价值。

传送门

题意:有两个操作 1:在l,r上放上一条线段 操作2:l,r被多少条线段覆盖。

思路:通过思考可以发现 前端在r之前的线段都可能覆盖[l,r],那么只有其中后端在l之前的线段不会覆盖,覆盖的就是两者之差。

线段树/数状数组维护

#include<bits/stdc++.h>
using namespace std;

#define lsn (u << 1)
#define rsn (u << 1 | 1)
#define mid (l + r >> 1)

typedef long long ll;
typedef unsigned long long ull;

typedef pair<int, int> P;

const int MAXN = 1e5 + 10;
const int MAX_LEN = 100000 + 10;
const int MAX_LOG_V = 22;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-7;
const ull B = 100000007;

int n, m;
int bit1[MAXN], bit2[MAXN];

void add(int *bit, int i, int x) {
    while(i <= n) { 
        bit[i] += x;
        i += i & -i;
    }
}

int sum(int *bit, int i) {
    int res = 0;
    while(i > 0) {
        res += bit[i];
        i -= i & -i;
    }
    return res;
}


void solve() {
    scanf("%d %d", &n, &m);
    for(int i = 1; i <= m; i++) {
        int op, l, r;
        scanf("%d %d %d", &op, &l, &r);
        if(op == 1) { add(bit1, l, 1); add(bit2, r, 1); }
        else printf("%d\\n", sum(bit1, r) - sum(bit2, l-1));
    }
}


int main() {
    //ios::sync_with_stdio(false);
    int t = 1; //scanf("%d", &t);
    while(t--) {
        solve();
    }
    return 0;
}

以上是关于P2184 贪婪大陆的主要内容,如果未能解决你的问题,请参考以下文章

P2184 贪婪大陆

P2184 贪婪大陆

[洛谷P2184]贪婪大陆

P2184 贪婪大陆

P2184 贪婪大陆

luogu题解 P2184 贪婪大陆