题目

洛谷

做法

\(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. Apache thrift - 使用,内部实现及构建一个可扩展的RPC框架

    本文首先介绍了什么是Apache Thrift,接着介绍了Thrift的安装部署及如何利用Thrift来实现一个简单的RPC应用,并简单的探究了一下Thrift的内部实现原理,最后给出一个基于Thri ...

  2. thinkPHP3.2.2中支持的URL的四种模式

  3. 2、easyUI-创建 CRUD可编辑dataGrid(表格)

    在介绍这节之前,我们先看一下效果图: 双击可以进入编辑

  4. PHP 可以获取客户端哪些访问信息

    php是一种弱类型的程序语言,但是最web的 在程序语言中有系统全局函数: $_SERVER <?php echo "".$_SERVER['PHP_SELF'];#当前正在 ...

  5. Cocos2d-x Lua中使用标签

    游戏场景中的文字包括了静态文字和动态文字.静态文字如下图所示游戏场景中①号文字“COCOS2DX”,动态文字如图4-1所示游戏场景中的②号文字“Hello World”.静态文字一般是由美工使用Pho ...

  6. Storm 集群安装

    http://archive.apache.org/dist/storm/  版本都在这 本人安装的是 其他版本的自行安装吧,估计都差不多 sudo mkdir /export/serverssudo ...

  7. PHP判断是手机端访问还是PC端访问网站

    Mobile_Detect 是一个轻量级的开源移动设备(手机)检测的 PHP Class, 它使用 User-Agent 中的字符串,并结合 HTTP Header,来检测移动设备环境. 这个设备检测 ...

  8. Javascript自动打开匹配的超链接

    可以用来点击广告.... 部分代码: function AutoClick() { var DivLink=document.getElementById("divLink"); ...

  9. Git处理 行结束符

    Dealing with line endings (Windows) 如果你正在使用Git在GitHub上和别人协作的话,确保Git处理行结束符的配置已经正确配置了. 每次在键盘上按下return键 ...

  10. python常用模块——random模块

    参考博客:http://www.360doc.com/content/14/0430/11/16044571_373443266.shtml 今天突然想起python该怎么生成随机数?查了一下,贴出实 ...