好像题解里都是树状数组(起码我翻到的是

说一种cdq分治的(这应该算是cdq分治了

用cdq比较简单,所以可以作为一个练手题

cdq分治其实是一种模糊的思想,处理\([l,r]\)区间内,有多少\((i,j)\)满足某种条件

这里假设\(i<j\),我们取一个\(mid=\frac{i+j}{2}\)

  • \(i<j\leq mid\),问题转换到区间\([l,mid]\)上解决
  • \(mid<i<j\), 问题转换到区间\([mid+1,r]\)上解决
  • \(i\leq mid <j\),注意这里才是真正干活的地方,前面两种情况都是甩锅给更小的区间

然后具体看下这个题

条件是\(a_i+a_j>b_i+b_j(i<j)\)

可以转化为\(a_i-b_i>b_j-a_j(i<j)\),其实就是把和\(i,j\)有关的项分别放在不等号两边

考虑\(i\leq mid<j\)的情况,则\(i<j\)这个条件已经没用了

开两个数组\(x,y\),分别存\(a_i-b_i(l\leq i\leq mid)\)和\(b_j-a_j(mid<j\leq r)\)的值

然后给它们排个序

从小到大考虑x中元素,有几个y中元素比它小

具体实现用一个cnt变量,表示对于当前的x中的元素,有几个比它小的y中元素,然后每次\(ans=ans+cnt\),,然后用两个指针分别指向x和y中当前的值就行了

每次对区间排序的复杂度是\(O(r-l+1)\)的,每个区间被排序\(\log n\)次(每次把一个区间分成它的一半,因此最多递归\(\log n\)层,每层)

画张丑陋的图理解一下



所以总时间复杂度\(O(n \log^2 n)\)

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>
#define reg register
#define EN std::puts("")
#define LL long long
inline int read(){
int x=0,y=1;
char c=std::getchar();
while(c<'0'||c>'9'){if(c=='-') y=0;c=std::getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
return y?x:-x;
}
int n;
int a[200006],b[200006];
int x[200006],y[200006];
LL work(int l,int r){
if(l==r) return 0;
int mid=(l+r)>>1;
x[0]=y[0]=0;
for(reg int i=l;i<=mid;i++) x[++x[0]]=a[i]-b[i];
for(reg int i=mid+1;i<=r;i++) y[++y[0]]=b[i]-a[i];
std::sort(x+1,x+1+x[0]);std::sort(y+1,y+1+y[0]);
reg int posl=1,posr=1,cnt=0;
reg LL ans=0;
for(;posl<=x[0];posl++){
for(;posr<=y[0]&&y[posr]<x[posl];posr++) cnt++;
ans+=cnt;
}
return ans+work(l,mid)+work(mid+1,r);
}
int main(){
n=read();
for(reg int i=1;i<=n;i++) a[i]=read();
for(reg int i=1;i<=n;i++) b[i]=read();
std::printf("%lld",work(1,n));
return 0;
}

CF1324D Pair of Topics的更多相关文章

  1. CF1324D Pair of Topics 题解

    原题链接 简要题意: 有两个数组 \(a_i\),\(b_i\),求有多少组 \(a_i + a_j > b_i + b_j (i \not = j)\). 显然,纯暴力过不了这道题目. 首先, ...

  2. 最简易 Pair of Topics解决方法

    这个题花费了我两天的时间来解决,最终找到了两个比较简单的方法 首先这个题不难看出是寻找a[i]+a[j]<0的情况,我第一开始直接用两个for循环遍历通过不了,应该是复杂度太大了 第一个方法 # ...

  3. Codeforces Round #627 (Div. 3) D - Pair of Topics(双指针)

    题意: 有长为n的a,b两序列,问满足ai+aj>bi+bj(i<j)的i,j对数. 思路: 移项得:(ai-bi)+(aj-bj)>0,i<j即i!=j,用c序列保存所有ai ...

  4. NodeJS学习:爬虫小探

    说明:本文在个人博客地址为edwardesire.com,欢迎前来品尝. 今天来学习alsotang的爬虫教程,跟着把CNode简单地爬一遍. 建立项目craelr-demo 我们首先建立一个Expr ...

  5. NodeJS制作爬虫全过程

    这篇文章主要介绍了NodeJS制作爬虫的全过程,包括项目建立,目标网站分析.使用superagent获取源数据.使用cheerio解析.使用eventproxy来并发抓取每个主题的内容等方面,有需要的 ...

  6. c++ pair 使用

    1. 包含头文件: #include <utility> 2. pair 的操作: pair<T1,T2> p; pair<T1,T2> p(v1,v2); pai ...

  7. 论Pair的重要性

    这些天我在用React和D3做图表,从已经实现的图表里复制了一些坐标轴的代码,发现坐标轴上的n个点里,只有第一个点下面能渲染出文字提示,其余点下面都无法渲染出文字. 和组里的FL一起百思不得其解好几天 ...

  8. 2016 ACM/ICPC Asia Regional Dalian Online 1010 Weak Pair dfs序+分块

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  9. pair的使用

    #include<iostream> #include<cmath> #include<cstdio> #include<algorithm> #inc ...

随机推荐

  1. C#使用HTML文件中的file文件上传,用C#代码接收上传文件

    单独做图片上传很简单,如果要客户端要上传头像保存到服务器就要稍微麻烦一点点了. 不多说了,直接上源码: private void Upload() { string jsonInfo = string ...

  2. C语言局部数组大小与内存的栈的关系

    今天有个同学问了一个问题,我居然答不上来,为什么不能开局部整型二维数组[1000][1000]?但是在数组前面加上一个static就可以了? windows下栈的大小(不是数据结构里面的栈)是2MB, ...

  3. Docker 清理命令 删除所有的镜像和容器

    杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器 docker rm $(docker ps -a -q) 删除所有未打 dangling ...

  4. 聊聊Disruptor 和 Aeron 这两个开源库

    Disruptor The best way to understand what the Disruptor is, is to compare it to something well under ...

  5. I - Fill The Bag codeforces 1303D

    题解:注意这里的数组a中的元素,全部都是2的整数幂.然后有二进制可以拼成任意数.只要一堆2的整数幂的和大于x,x也是2的整数幂,那么那一堆2的整数幂一定可以组成x. 思路:位运算,对每一位,如果该位置 ...

  6. Linux下安装python3环境搭建

    Linux下python3环境搭建 Linux安装软件有哪些方式? rpm软件包 手动安装 拒绝此方式 需要手动解决依赖关系 yum自动化安装 自动处理依赖关系 非常好用 源代码编译安装,可自定义的功 ...

  7. 数据结构(C语言版)---二叉树

    1.二叉树:任意一个结点的子结点个数最多两个,且子结点的位置不可更改,二叉树的子树有左右之分. 1)分类:(1)一般二叉树(2)满二叉树:在不增加树的层数的前提下,无法再多添加一个结点的二叉树就是满二 ...

  8. tf.keras的模块

          

  9. 全网最全最细的appium自动化测试环境搭建教程以及appium工作原理

    一.前言 ​ 对于appium自动化测试环境的搭建我相信90%的自学者都是在痛苦中挣扎,在挣扎中放弃,在放弃后又重新开始,只有10%的人,人品比较好,能够很快并顺利的搭建成功.appium 自动化测试 ...

  10. 隐藏响应中的server和X-Powered-By

    来源:https://www.yduba.com/biancheng-7831560074.html 有时候,我们用调试工具查看别人的网站时,经常看到 X-Powered-By:PHP/7.1.8 这 ...