1. bitset是一种优秀的位域实现,时空效率均有优化,可以取代大部分bool数组。
  2. 如果要用到bitset某一位的值,应当调用
    st.test(3)
    而非直接调用[]运算符进行下标访问
  3. 全局变量里的bitset可以直接访问读写,和bool数组一样初始化为了0。
#include <bits/stdc++.h>
#define sc(x) scanf("%d", &(x))
#define pr(x) printf("%lld\n", (x))
#define rep(i, l, r) for (int i = (l); i <= (r); ++i)
using namespace std;
typedef long long ll;
const int N = 1e5 + 7;
const int mod = 1e9 + 7;
typedef pair<int, int> pii;
pii a[N];
unordered_map<int, int> pos;
vector<int> ori;
int vis[N >> 1];
int main() {
    int n, m;
    sc(n), sc(m);
    rep(i, 1, m) sc(a[i].first), sc(a[i].second);
    // 离散化
    rep(i, 1, m) {
        ori.emplace_back(a[i].first);
        // ori.emplace_back(a[i].second);
        ori.emplace_back(a[i].second + 1);
    }
    sort(ori.begin(), ori.end());
    ori.erase(unique(ori.begin(), ori.end()), ori.end());
    int sz = ori.size();
    for (int i = 0; i < sz; ++i) pos[ori[i]] = i;
    // 差分 前缀和
    rep(i, 1, m) {
        vis[pos[a[i].first]]++;
        vis[pos[a[i].second + 1]]--;
    }
    int tot = N >> 1;
    rep(i, 1, tot) vis[i] += vis[i - 1];

    return 0;
}