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 贪婪大陆的主要内容,如果未能解决你的问题,请参考以下文章

luogu题解 P2184 贪婪大陆

P2184 贪婪大陆

AC日记——贪婪大陆 洛谷 P2184

P2184 贪婪大陆

P2184 贪婪大陆

[洛谷P2184]贪婪大陆