在数轴上维护一个线段集合S,支持两种操作:
- A l r:将S中所有与线段[l,r]相关的线段删除,并将[l,r]加入S中,需要输出删除个数。
- B:查询S中元素数量。
分析:重载小于号,如果x小于y,那么x严格小于y,即x的右端点要小于y的左端点,这样定义相交的线段都是相等的,可以用set来找。
#include <bits/stdc++.h>
using llong = long long;
struct Info {
int l, r;
bool operator<(const Info &rhs) const {
return r < rhs.l;
}
};
void solve() {
std::set<Info> st;
int n;
std::cin >> n;
for (int i = 0; i < n; i++) {
std::string op;
std::cin >> op;
if (op == "A") {
Info info;
std::cin >> info.l >> info.r;
int cnt = 0;
auto it = st.find(info);
while (it != st.end()) {
cnt += 1;
st.erase(it);
it = st.find(info);
}
st.insert(info);
std::cout << cnt << "\n";
} else if (op == "B") {
std::cout << st.size() << "\n";
}
}
}
int main() {
std::cin.tie(0)->sync_with_stdio(0);
int t = 1;
while (t--) solve();
return 0;
}
标签:info,std,预约,线段,cin,st,int,公场,lgP2161
From: https://www.cnblogs.com/chenfy27/p/18301843