题意:
解法:
由平面几何欧拉定理可知:
新增一条线,会多出:新增交点数量+1个平面.
我们对两类线段分开讨论,
对线段一端排序,依次插入,
那么每次新增的交点就是逆序对数量,
逆序对数量离散化之后用BIT计算即可.
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=4e5+5;
struct BIT{
int c[maxm];
int lowbit(int i){
return i&-i;
}
void add(int i,int t){
while(i<maxm)c[i]+=t,i+=lowbit(i);
}
int ask(int i){
int ans=0;
while(i)ans+=c[i],i-=lowbit(i);
return ans;
}
void init(){
memset(c,0,sizeof c);
}
}T;
struct Q{
int x,y;
}p[maxm],q[maxm];
int xx[maxm],num;
int edx,edy;
int n,m;
bool cmp(Q a,Q b){
return a.x<b.x;
}
void solve(){
cin>>edx>>edy;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>p[i].x>>p[i].y;
xx[++num]=p[i].x;
xx[++num]=p[i].y;
}
for(int i=1;i<=m;i++){
cin>>q[i].x>>q[i].y;
xx[++num]=q[i].x;
xx[++num]=q[i].y;
}
sort(xx+1,xx+1+num);
num=unique(xx+1,xx+1+num)-xx-1;
for(int i=1;i<=n;i++){
p[i].x=lower_bound(xx+1,xx+1+num,p[i].x)-xx;
p[i].y=lower_bound(xx+1,xx+1+num,p[i].y)-xx;
}
for(int i=1;i<=m;i++){
q[i].x=lower_bound(xx+1,xx+1+num,q[i].x)-xx;
q[i].y=lower_bound(xx+1,xx+1+num,q[i].y)-xx;
}
sort(p+1,p+1+n,cmp);
sort(q+1,q+1+m,cmp);
int ans=1;
for(int i=1;i<=n;i++){
ans+=(i-1)-T.ask(p[i].y-1)+1;
T.add(p[i].y,1);
}
T.init();
for(int i=1;i<=m;i++){
ans+=n;
ans+=(i-1)-T.ask(q[i].y-1)+1;
T.add(q[i].y,1);
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
solve();
return 0;
}