题目

洛谷

做法

\(i≤x≤j,a[i]<\frac{a[x]}{a[j]}\)

考虑\(a[x]\)的贡献,单调栈预处理\(L,R\)能作为最大值的区间

枚举一端点,仅需另一端点满足条件即可,启发式枚举端点

另一端点丢到树状数组里随便乱搞,由于是一个区间的要差分一下

My complete code

#include<bits/stdc++.h>
#include<vector>
using namespace std;
typedef long long LL;
const LL maxn=1e5+9;
struct node{
LL val,x;
}que[maxn]; vector<LL> Q[maxn];
LL n,cnt;
LL L[maxn],R[maxn],a[maxn],b[maxn];
inline void Fir_LR(){
LL tail(0);
for(LL i=1;i<=n;++i){
while(tail && que[tail].val<a[i]) --tail;
L[i]=(tail?que[tail].x+1:1);
que[++tail]=(node){a[i],i};
}
tail=0;
for(LL i=n;i>=1;--i){
while(tail && que[tail].val<=a[i]) --tail;
R[i]=(tail?que[tail].x-1:n);
que[++tail]=(node){a[i],i};
}
}
inline void Fir_Q(){
for(LL i=1;i<=n;++i)
if(i-L[i]<=R[i]-i){
for(LL j=L[i];j<=i;++j)
Q[R[i]].push_back(a[i]/a[j]),
Q[i-1].push_back(-a[i]/a[j]);
}else{
for(LL j=i;j<=R[i];++j)
Q[i].push_back(a[i]/a[j]),
Q[L[i]-1].push_back(-a[i]/a[j]);
}
}
struct Tree_k{
LL tree[maxn];
inline LL Lowbit(LL x){ return x&-x; }
inline void Add(LL x,LL val){
for(;x<=cnt;x+=Lowbit(x)) tree[x]+=val;
}
inline LL Query(LL x){
LL ret(0);
for(;x;x-=Lowbit(x)) ret+=tree[x]; return ret;
}
}Tk;
inline void Fir_S(){
LL ret(0);
for(LL i=1;i<=n;++i){
Tk.Add(a[i],1);
for(LL j=0;j<Q[i].size();++j){
LL val(Q[i][j]);
LL x(abs(val)>=b[cnt]?cnt:upper_bound(b+1,b+1+cnt,abs(val))-b-1);
ret+=(val>0?1:-1)*Tk.Query(x);
}
}
cout<<ret;
}
int main(){
cin>>n;
for(LL i=1;i<=n;++i) cin>>a[i],b[i]=a[i];
Fir_LR();
Fir_Q();
sort(b+1,b+1+n), cnt=unique(b+1,b+1+n)-b-1;
for(LL i=1;i<=n;++i) a[i]=lower_bound(b+1,b+1+cnt,a[i])-b;//,cout<<a[i]<<' ';cout<<endl;
Fir_S();
}

P4755 Beautiful Pair的更多相关文章

  1. 【题解】P4755 Beautiful Pair(启发式合并的思路+分治=启发式分治)

    [题解]P4755 Beautiful Pair upd: 之前一个first second烦了,现在AC了 由于之前是直接抄std写的,所以没有什么心得体会,今天自己写写发现 不知道为啥\(90\) ...

  2. 洛谷 P4755 - Beautiful Pair(主席树+分治+启发式优化)

    题面传送门 wssb,我紫菜 看到这类与最大值统计有关的问题可以很自然地想到分治,考虑对 \([l,r]\) 进行分治,求出对于所有 \(l\le x\le y\le r\) 的点对 \((x,y)\ ...

  3. luogu P4755 Beautiful Pair

    luogu 这题有坨区间最大值,考虑最值分治.分治时每次取出最大值,然后考虑统计跨过这个位置的区间答案,然后两边递归处理.如果之枚举左端点,因为最大值确定,右端点权值要满足\(a_r\le \frac ...

  4. 洛谷$P4755\ Beautiful\ Pair$ 最大值分治

    正解:最大值分治 解题报告: 传送门$QwQ$ 昂考虑如果已经钦定了点$x$是这个$max$了,然后现在要求有多少对$[l,r]$满足$a_x=max\left\{a_i\right\},i\in[l ...

  5. P4755 Beautiful Pair (分治 + 主席树)

    题意:1e5的数组 计算有多少对 ai * aj <= max(ai ai+1...aj-1 aj) 题解:在处理这种涉及到区间极值的题时 好像是个套路分治 从级值中间分成两个区间 从区间短的那 ...

  6. 「LGR-049」洛谷7月月赛 D.Beautiful Pair

    「LGR-049」洛谷7月月赛 D.Beautiful Pair 题目大意 : 给出长度为 \(n\) 的序列,求满足 \(i \leq j\) 且 $a_i \times a_j \leq \max ...

  7. [luogu4755]Beautiful Pair

    [luogu4755]Beautiful Pair luogu 第一次写最大值分治感觉有点丑 每次找到最大值mid,扫小的一边,主席树查大的一边小于等于\(\frac{a[mid]}{a[i]}\)的 ...

  8. Luogu4755 Beautiful Pair 最值分治、主席树

    传送门 整天做一些模板题感觉药丸 设\(val_i\)表示第\(i\)个位置的值 看到区间最大值考虑最值分治.对于当前的区间\([l,r]\),找到区间最大值\(mid\),递归\([l,mid-1] ...

  9. luoguP4755 Beautiful Pair

    https://www.luogu.org/problemnew/show/P4755 考虑分治,在 [l, r] 区间中用线段树找到最大的一个点,处理经过它的可行数对的个数,统计个数可以离线树状数组 ...

随机推荐

  1. Eclipse 重构菜单

    Eclipse 重构菜单 使用Eclipse重构 在项目开发中我们经常需要修改类名,但如果其他类依赖该类时,我们就需要花很多时间去修改类名. 但 Eclipse 重构功能可以自动检测类的依赖关系并修改 ...

  2. redhat ent 6.5 virtualbox虚拟机通过桥接方式配置主机-虚拟机的局域网

    感谢: http://www.linuxidc.com/Linux/2012-06/62544.htm http://www.2cto.com/os/201204/126178.html Virual ...

  3. react import改为绝对路径

    最近在使用react时发现路径用../../很不方便,特别是修改项目结构时,加减../都能改到吐血, 所有在网上找了半天webpack的配置,特此记录下 module.exports = (webpa ...

  4. 关于java类加载器的一些概念

    顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java ...

  5. centos7 下 的lamp 的安装原创详细教程

    时间 : 2017-08-03           目标: 基于CENTOS7 安装 LNMP,liunx的安装不做讲解,主要是 NGINX PHP7 MYSQL 的编译安装 第一节    nginx ...

  6. Mac下通过shell脚本修改properties文件

    通过shell脚本替换属性文件中的某行记录 假设有如下属性文件 demo.properties user.name=test user.password=123456 ................ ...

  7. 通过w3c方式 读取xml内容

    /** * 通过w3c方式 读取xml内容 * @param lablenames 要读取的节点名称 * @param file_path_name 文件绝对路径 * @return */ publi ...

  8. python学习【第八篇】python模块

    模块与包 模块的概念 在python中一个.py文件就是一个模块. 使用模块可以提高代码的可维护性. 模块分为三种: python标准库 第三方模块 自定义模块 模块的导入方法 1.import语句 ...

  9. idea 不能编译生成class文件

    问题:开发工程中将idea中编译输出目录 out 删掉.发现再次编译不能生成class文件 解决方案:settings -> compiler 勾选自动编译选项

  10. Docker Metasploit Framework

    https://hub.docker.com/r/usertaken/metasploit-framework/ docker pull usertaken/metasploit-framework ...