题意:


解法:

由平面几何欧拉定理可知:
新增一条线,会多出:新增交点数量+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;
}

gym101908 C. Pizza Cutter(平面几何欧拉定理,树状数组求逆序对)相关推荐

  1. 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)

    链接:https://ac.nowcoder.com/acm/contest/308/D 来源:牛客网 tokitsukaze and Inverse Number 时间限制:C/C++ 1秒,其他语 ...

  2. loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分...

    $ \color{#0066ff}{ 题目描述 }$ 「Hanabi, hanabi--」 一听说祭典上没有烟火,Karen 一脸沮丧. 「有的哦-- 虽然比不上大型烟花就是了.」 还好 Shinob ...

  3. Tido 习题-二叉树-树状数组求逆序对

    这里给大家提供一个全新的求逆序对的方法 是通过树状数组来实现的 题目描述   样例输入 Copy 5 2 3 1 5 4 样例输出 Copy 3 提示       #include<iostre ...

  4. 树状数组求逆序对_初识树状数组

    树状数组是用来解决数列多次单点修改和前缀和查询的利器. 首先我们来看问题的原型: 已知一个长度为n(n<=10 0000)的数列,初始值都是零,现在我们要对数列施加两种类型的操作共q(q< ...

  5. 树状数组 求 逆序对

    如何统计第i个数与1-第i - 1个数构成多少个逆序对呢? 考虑根据值来建树状数组,初始树状数组为全0,先按序列从左到右将数据的值对应的位置的数加一,代表又有一个数出现.因此,在循环到第i项时,前i- ...

  6. 树状数组求逆序对_区间和的个数(树状数组)

    327. 区间和的个数 给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper. 区间和 S(i, j) 表示在 nums 中,位置从 i ...

  7. 牛客 - What Goes Up Must Come Down(树状数组求逆序对)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列,每次操作可以交换相邻两个数字的位置,现在问最小进行多少次操作,可以使得序列的相对大小呈山峰状(中间高两边低,或非严格递增或非严格递减) 题目分 ...

  8. 【Luogu1908】逆序对(离散化,树状数组求逆序对)

    problem 给你一个长为n的序列A[] 求该序列的逆序对个数 solution 用b[i]保存下标i在A中出现的次数,那么数组b[i]在[l,r]上的区间和,就表示序列A在范围[l,r]内的有多少 ...

  9. POJ2299 树状数组求逆序对

    裸题,不多解释. 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include& ...

  10. Asia Yokohama Regional Contest 2018 G题 What Goes Up Must Come Down(树状数组求逆序对)

    https://codeforces.com/gym/102082 题意: 给一个数组大小不超过1e5,每个数的值也是1e5以内,可以交换相邻两个数,求保证它呈现一个非递减再非递增的趋势的最小交换次数 ...

最新文章

  1. Fedora 8中驱动ASUS6摄像头
  2. Google Chubby 论文翻译
  3. 通俗易懂的来理解Iaas,Paas,SaaS
  4. Atmel与ARM合力打造物联网开发平台
  5. mysql日期函_mysql日期函数
  6. distinct返回null报错_在Java中如何避免“!=null”式的判空语句?
  7. Flink on Zeppelin (2) - Batch 篇
  8. python读取txt每一行存入数组
  9. mysql循环插入语句_sql循环插入的语句写法
  10. access中如何画斜线_在Excel单元格中如何用斜线分割填写?
  11. ctfshow 做题 MISC入门 模块 31-40
  12. QQ守卫农场辅助--QQ守卫农场外挂
  13. google工具栏新览
  14. linux python3安装proton_深度deepin系统中通过Lutris(wine、proton)运行逆水寒的方法 ......
  15. (多项式)因式分解定理(Factor theorem)与多项式剩余定理(Polynomial remainder theorem)(多项式长除法)
  16. STM32独立按键实现单击双击长按功能
  17. Ethical.Hacking.2021.10:BUILDING TROJANS
  18. 向上取整⌈⌉和向下取整⌊⌋符号
  19. php webshell 分析,一款奇葩的PHP Webshell后门分析
  20. Hibernate 缓存机制续 - 查询缓存

热门文章

  1. 特发性震颤为什么在喝酒后症状消失?
  2. Classics Sentence Excerpt
  3. Error: Unable to execute “/usr/bin/vmware-uninstall-tools.pl.终极解决方案
  4. [SDOI2015] 星际战争
  5. Delphi xe7组件和控件的安装方法
  6. .net支付宝沙箱二维码支付
  7. miui修改Android,修改 MIUI「快捷开关」布局
  8. 【问题记录与解决】jupyter notebook 无法重命名,无法运行测试代码 || jupyter notebook 中常用的两个快捷键。
  9. 2023年天津仁爱学院高职升本科专业考试报考须知
  10. fabric 中 peer 和 couch 容器内部数据存放目录地址