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