luoguP4755 Beautiful Pair

https://www.luogu.org/problemnew/show/P4755

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

因为最多被分成 2n 个区间(像线段树一样),对于每个区间使用类似于启发式合并的思想将要处理的区间放到 vector 里面,最多有 n log n 个查询,复杂度 n log^2 n

#include <bits/stdc++.h>
#define For(i, a, b) for(int i = a; i <= b; i++)
using namespace std;typedef unsigned long long ull;
typedef long long ll;template <typename _T>
inline void read(_T &f) {f = 0; _T fu = 1; char c = getchar();while(c < '0' || c > '9') {if(c == '-') fu = -1; c = getchar();}while(c >= '0' && c <= '9') {f = (f << 3) + (f << 1) + (c & 15); c = getchar();}f *= fu;
}const int N = 1e5 + 5;int Max[N << 2], wz[N << 2], a[N], pre[N], f[N];
long long ans;
int n, len;void build(int u, int l, int r) {if(l == r) {Max[u] = a[l];wz[u] = l;return;}int mid = (l + r) >> 1;build(u << 1, l, mid);build(u << 1 | 1, mid + 1, r);if(Max[u << 1] > Max[u << 1 | 1]) Max[u] = Max[u << 1], wz[u] = wz[u << 1];else Max[u] = Max[u << 1 | 1], wz[u] = wz[u << 1 | 1];
}int Q1, Q2;void query(int u, int l, int r, int L, int R) {if(l <= L && R <= r) {if(Max[u] > Q1) {Q1 = Max[u];Q2 = wz[u];}return;}int mid = (L + R) >> 1;if(mid >= l) query(u << 1, l, r, L, mid);if(mid + 1 <= r) query(u << 1 | 1, l, r, mid + 1, R);
}int lowbit(int x) {return x & -x;}
void add(int x) {for(int i = x; i <= n; i += lowbit(i)) f[i]++;}
int query(int x) {int ans = 0; for(int i = x; i; i -= lowbit(i)) ans += f[i]; return ans;}struct ele {int l, r, v;bool operator < (const ele A) const {return v < A.v;}ele (int a, int b, int c) : l(a), r(b), v(c) {}ele () {}
};vector <ele> Q;
vector <int> t[N];void solve(int l, int r) {if(l > r) return;Q1 = 0; query(1, l, r, 1, n);int L = Q2 - l, R = r - Q2; int tmp = Q2;if(L < R) for(int i = l; i <= Q2; i++) { Q.push_back(ele(Q2, r, pre[Q1] / pre[a[i]])); }else for(int i = Q2; i <= r; i++) Q.push_back(ele(l, Q2, pre[Q1] / pre[a[i]]));solve(l, tmp - 1); solve(tmp + 1, r);
}int main() {cin >> n;for(int i = 1; i <= n; i++) { read(a[i]), pre[i] = a[i]; };sort(pre + 1, pre + n + 1); len = unique(pre + 1, pre + n + 1) - pre - 1;for(int i = 1; i <= n; i++) a[i] = lower_bound(pre + 1, pre + len + 1, a[i]) - pre;build(1, 1, n); solve(1, n);for(vector <ele> :: iterator it = Q.begin(); it != Q.end(); it++) it -> v = upper_bound(pre + 1, pre + len + 1, it -> v) - pre - 1;for(int i = 1; i <= n; i++) t[a[i]].push_back(i);sort(Q.begin(), Q.end()); int LEN = Q.size(), now = 0;for(int i = 0; i <= len; i++) {for(vector <int> :: iterator it = t[i].begin(); it != t[i].end(); it++) add(*it);while(Q[now].v == i && now < LEN) {ans += (long long)(query(Q[now].r) - query(Q[now].l - 1));now++;}}cout << ans << endl;return 0;
}

转载于:https://www.cnblogs.com/LJC00118/p/9712365.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何关掉macbook的开机声音

1、系统偏好设置->声音 2、关掉“启动时播放声音” 这样设置之后&#xff0c;macbook再开机就没有“咚”的那个声音了

oatdata结构详解

段名称 文件内偏移段大小ELF头部0x000000000x00001000oatdata0x000010000x027b8000oatexec0x027b90000x01ed69ecELF尾部0x046900000x00001000OatHeader&#xff1a; 0x00001000 | 6F 61 74 0A 30 33 39 00 77 40 00 B1 03 00 00 00 | 0x00001010 | 01 00 00 00 19 00 00 00 00…

【跃迁之路】【599天】程序员高效学习方法论探索系列(实验阶段356-2018.09.27)...

(跃迁之路)专栏 实验说明 从2017.10.6起&#xff0c;开启这个系列&#xff0c;目标只有一个&#xff1a;探索新的学习方法&#xff0c;实现跃迁式成长实验期2年&#xff08;2017.10.06 - 2019.10.06&#xff09;我将以自己为实验对象。我将开源我的学习方法&#xff0c;方法不断…

开源 java CMS - FreeCMS2.6 Web页面信息采集

2019独角兽企业重金招聘Python工程师标准>>> java开源论坛系统http://javabbs.javaz.cn 项目地址&#xff1a;http://www.freeteam.cn/ Web页面信息采集 从FreeCMS 2.1开始支持 通过简单配置即可抓取目标网页信息&#xff0c;支持增量式采集、关键字替换、定时采集&…

PropertySource和ConfigurationProperties

https://blog.csdn.net/u013725455/article/details/79352459转载于:https://www.cnblogs.com/qunincey/p/9721364.html

ORACLE关于段的HEADER_BLOCK的一点浅析

在学习段&#xff08;segment&#xff09;、区间&#xff08;extent&#xff09;时&#xff0c;对段的HEADER_BLOCK有一些疑问&#xff0c;本文记录一下探究的实验过程以及相关总结&#xff0c;&#xff0c;如有不对的地方&#xff0c;敬请指出。以SCOTT.EMP表为例&#xff08;…

【源码探索】.NET中的List,为什么即有Count属性又有Count()方法

“优秀的程序员的标准之一是&#xff1a;编写更易于扩展的代码”图片&#xff1a;奥森公园的向日葵 拍摄于2022年7月23日01—问题缘起上一篇中&#xff0c;我们知道List<T>的是基于数组实现的可变长度的列表。很多小伙伴发现&#xff0c;List<T>即有Count属性又有C…

使用ASP.NET广告控件的XML语言创建广告链接--ASP.NET

1、AdRotator广告控件的所有属性都是可选的&#xff0c;XML文件中可以包含如下表所示的属性&#xff08;XML文件的广告属性&#xff09;。 属性 说明 ImageUrl 要显示的图像的URL NavigateUrl 单击AdRotator控件时要转到的网页URL AlternateText 图像不可用时现实的问…

vim编辑和命令模式、实践

2019独角兽企业重金招聘Python工程师标准>>> 9月29日任务 5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践 Vim编辑模式 进入编辑模式 操作 说明 i 在光标所在字符前插入内容 I 在光标所在行行首插入内容 a 在光标所在字符后插入内容 A 在光标所在行行尾插入…

英语自动提取高频词_斑马英语提分营免费体验课

斑马英语电脑版是一款专业可靠的英语学习软件&#xff0c;斑马英语官方版可以帮助孩子学习纯正的英语口语发音&#xff0c;以讲故事的形式让孩子学习单词及口语练习&#xff0c;斑马英语电脑版针对儿童语言特征设计的智能口语测评系统&#xff0c;能够自动识别发音和评分&#…

【C# Personal Handbook】开篇

博客已提更一年多了&#xff0c;这段时间里&#xff0c;发生了很多事情&#xff0c;也让我对C#更加依恋&#xff0c;所以我决定重新更新博客&#xff0c;以自己的实践经验梳理C#的技术脉络&#xff0c;也欢迎大家手下留情&#xff0c;耐心指点&#xff0c;让我们共同进步吧&…

canvas特效代码详解(2)

canvas是一个就基于像素的画图h5元素。 利用canvas做一个如下描述所示的动态图形&#xff1a;当鼠标点下去时开始绘图&#xff0c;在鼠标结束时完成一个矩形&#xff0c;当再一次点击时重复第一次的绘图步骤。 1 <!DOCTYPE html>2 <html>3 <head>4 …

阿里云三维可视化使用初体验

title: 阿里云三维可视化使用初体验tags: 物联网开发BIMcategories:物联网本文主要的目标是使用阿里云的云产品 - 物联网套件三维可视化 开始 准备工作 进入下载页面下载页面&#xff0c;点击“模型编辑器下载”安装模型编辑器下载安装完毕&#xff0c;启动模型编辑器下载&…

同时绑定onpropertychange 和 oninput 事件,实时检测 input、textarea输入改变事件,支持低版本IE,支持复制粘贴...

实时检测 input、textarea输入改变事件&#xff0c;支持低版本IE&#xff0c;支持复制粘贴 检测input、textarea输入改变事件有以下几种&#xff1a; 1、onkeyup/onkeydown 捕获用户键盘输入事件。缺陷&#xff1a;复制粘贴时无法检测2、onchenge缺陷&#xff1a;要满足触发条件…

hp laser103 属性没有配置项_(常见解决方法)UEditor报错“后端配置项没有正常加载,上传插件不能正常使用”...

&#xff08;常见解决方法&#xff09;UEditor报错“后端配置项没有正常加载&#xff0c;上传插件不能正常使用”_向来萧瑟也无畏-CSDN博客​blog.csdn.net报错信息详见此文的“排错过程&&错误信息”→ueditor无法上传图片_向来萧瑟也无畏-CSDN博客3种解决方法1.大小写…

WinForm(十二)画图

在.NET中&#xff0c;画图主要是通过Graphics类实现的&#xff0c;这个类主要通过两类方法完成画图&#xff0c;一类是DrawXXX&#xff0c;画各种线条图形&#xff1b;另一类是FillXXX,用各种形状&#xff0c;填充各种图形。Graphics是画板&#xff0c;Draw各个方法是各种盏笔&…

从4个方面简单介绍SaaS

你了解什么是SaaS吗&#xff1f;SaaS有什么优势&#xff1f;选择SaaS平台要注意哪些要素&#xff1f;在这里&#xff0c;怡海软件将针对这些问题进行简单介绍&#xff1a; 什么是SaaS&#xff1f;SaaS是Software-as-a-Service&#xff08;软件即服务&#xff09;的简称&#xf…

腾讯的一笔画游戏--巧妙解法

根据这个图形我们可以发现图中的规律。 所有数据的和 所有边长的和-最后一个形状的一个边-除最后一个边之外所有边的一半。 知道了这个规律后我们就很容易去实现代码了&#xff1a; 这里的解决关键点为——“余弦定理”&#xff0c;因为角度我们可以用&#xff08;n-2&#xf…

Map value类型不同的写法

Map value类型不同的写法 Map<String, Object> accountMapnew HashMap<String, Object>(); int userId data.get("userId").getAsInt(); int accType data.get("accType").getAsInt();String name data.get("accType").getAsStr…

mysql中局部变量说法正确的是_mysql全局变量和局部变量

全局变量和局部变量在服务器启动时&#xff0c;会将每个全局变量初始化为其默认值(可以通过命令行或选项文件中指定的选项更改这些默认值)。然后服务器还为每个连接的客户端维护一组会话变量&#xff0c;客户端的会话变量在连接时使用相应全局变量的当前值初始化。举一个例子&a…