题目

洛谷

做法

\(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();
}

最新文章

  1. WinRAR 4.20 beta2 key!注册文件 注册码
  2. MVC Razor语法
  3. 几种排序算法的学习,利用Python和C实现
  4. Docker探索系列1之docker入门安装与操作
  5. maven jar包库
  6. JAVA 回调机制(callback)
  7. (转载)iOS Framework: Introducing MKNetworkKit
  8. centos 6.5 安装php redis 扩展
  9. Url Rewrite IIS 配置
  10. Java String字符串深入详解
  11. python源文件转换成exe问题解决贴
  12. Android的ImageView介绍-android学习之旅(二十二)
  13. Day6_正则表达式
  14. 2019.04.16打卡(java 数组)
  15. python基础知识回顾之字符串
  16. 新辰:共享是SEO的思维 用户是SEO的核心
  17. linux系统编程:自己动手写一个cp命令
  18. print 出来的信息添加到text文件里
  19. Java反编译工具Luyten介绍
  20. 关于伪分布zookeeper集群启动出错(Error contacting service. It is probably not running.)

热门文章

  1. Servlet 部署
  2. bat遍历当前目录下的文件,批量重命名
  3. Classification week2: logistic regression classifier 笔记
  4. BAPI、badi 和 LSMW 的相同点和不同点及具体操作
  5. 复制对象(一)copy和mutableCopy方法
  6. TP数据查询
  7. libnids介
  8. 关东升的《从零开始学Swift》即将出版
  9. 爬虫实战【7】Ajax解析续-今日头条图片下载
  10. #1560 : H国的身份证号码II(dp+矩阵快速幂)