0%

ABC-405-F - Chord Crossing 和弦交叉(如何离线计算相交区间数量)

思路讲解

像这种题目,一般来说是通过一些离线想法,比如排序什么的,然后运用一些数据结构计算端点的数量

这道题目本质上是要离线计算相交而不包含的区间数量

通过离线,保证一个端点一定符合要求,另一个端点数量使用树状数组求出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
ll idx=1;
FOR(i,1,Q){
ll l=que[i][0],r=que[i][1],ind=que[i][2];
while(idx<=M){
// 我们保证了实线r大于虚线r。
if(lr[idx][1]<r){
break;
}
trl.add(lr[idx][0],1);
++idx;
}
// 要求实线l小于虚线r大于虚线l
Ans[ind]=trl.query(l,r);
}
sort(que+1,que+1+Q);
sort(lr+1,lr+1+M);
idx=1;
FOR(i,1,Q){
ll l=que[i][0],r=que[i][1],ind=que[i][2];
while(idx<=M){
// 我们保证了实线l小于虚线l。
if(lr[idx][0]>l){
break;
}
trr.add(lr[idx][1],1);
++idx;
}
// 要求实线l小于虚线r大于虚线l
Ans[ind]+=trr.query(l,r);
}

AC代码

https://atcoder.jp/contests/abc405/submissions/66033424

心路历程(WA,TLE,MLE……)