給定 N(≤100,000)個區間 [l, r],對每個區間求:有多少個其他區間完全包含它(即 lj ≤ li 且 rj ≥ ri,允許邊界重合)。
sort(segments, key=(l ASC, r DESC));
for seg in segments:
if same as previous:
ans[seg.id] = ans[prev.id];
else:
ans[seg.id] = query(MAX) - query(seg.r - 1); // 統計 r_j >= r_i
add(seg.r, 1);
struct Seg { int l, r, id; };
bool operator<(Seg a, Seg b) {
if (a.l != b.l) return a.l < b.l;
return a.r > b.r;
}
void add(int x, int v) { for(; x<=MAXN; x+=x&-x) bit[x]+=v; }
int sum(int x) { int r=0; for(; x; x-=x&-x) r+=bit[x]; return r; }
// 主循環
for (int i=1; i<=N; ++i) {
if (i>1 && s[i].l==s[i-1].l && s[i].r==s[i-1].r)
ans[s[i].id] = ans[s[i-1].id];
else
ans[s[i].id] = sum(MAXN) - sum(s[i].r-1);
add(s[i].r, 1);
}