【处理元组有关的题型的技巧】codeforces 1677 A. Tokitsukaze and Strange Inequality
题意
第一行输入一个正整数 \(T(1 \leq T \leq 1000)\),代表共有 \(T\) 组测试用例,对于每组测试用例:
第一行输入一个正整数 \(n(4 \leq n \leq 5000)\),第二行输入 \(n\) 个正整数 \(p_i(1 \leq p_i \leq n)\)。
对于 \(1 \leq i < j < k < l \leq n\),若有 \(a_i < a_k,a_j > a_l\)成立,我们称 \([a_i, a_j, a_k, a_l]\) 是合法四元组。
你需要统计出合法四元组的数目。
题解
有关三元组、四元组之类的题型,通常先思考中间的数,再思考两端的数,是比较容易的思考方式。
观察数据范围,\(4 \leq n \leq 5000\),因此时间复杂度只需要控制在 \(O(n^2)\) 及以内即可。
那不妨枚举 \(a_j\) 和 \(a_k\),此时\(a_i\) ∈ {\(a_1, a_2, ..., a_{j-1}\)},\(a_l\) ∈ {\(a_{k+1}, a_{k+2}, ..., a_{n}\)}。对于前 \(j - 1\) 个元素,使用插入排序进行维护,随后可以用二分法维护出满足 \(a_i < a_k\) 的数对数量。对于后 \(n-k\) 个元素,使用 \(cnt\) 统计满足 \(a_j > a_l\) 的数对数量,当 \(k\) 往后移动时,同步维护新的 \(cnt\)。
参考代码
void solve() {
ans = 0LL;
cin >> n;
for (int i = 0; i < n; ++ i) cin >> a[i];
for (int i = 1, j; i < n - 2; ++ i) {
int cnt = 0;
int itemp = a[i - 1];
for (j = i - 2; j >= 0; -- j) {
if (itemp < a[j]) a[j + 1] = a[j];
else break;
}
a[j + 1] = itemp;
for (j = i + 1; j < n; ++ j) cnt += a[i] > a[j];
for (j = i + 1; j < n; ++ j) {
cnt -= a[i] > a[j];
if (!cnt) break;
ans += (lower_bound(a, a + i, a[j]) - a) * cnt;
}
}
cout << ans << '\n';
}
【处理元组有关的题型的技巧】codeforces 1677 A. Tokitsukaze and Strange Inequality的更多相关文章
- codeforces 373 A - Efim and Strange Grade(算数模拟)
codeforces 373 A - Efim and Strange Grade(算数模拟) 原题:Efim and Strange Grade 题意:给出一个n位的实型数,你可以选择t次在任意位进 ...
- CTF web题型解题技巧
工具集 基础工具:Burpsuite,python,firefox(hackbar,foxyproxy,user-agent,swither等) 扫描工具:nmap,nessus,openvas sq ...
- codeforces 842 D. Vitya and Strange Lesson(01字典树+思维+贪心)
题目链接:http://codeforces.com/contest/842/problem/D 题解:像这种求一段异或什么的都可以考虑用字典树而且mex显然可以利用贪心+01字典树,和线段树差不多就 ...
- Codeforces - 1191F - Tokitsukaze and Strange Rectangle - 组合数学 - 扫描线
https://codeforces.com/contest/1191/problem/F 看了一下题解的思路,感觉除了最后一段以外没什么启发. 首先离散化x加快速度,免得搞多一个log.其实y不需要 ...
- Tokitsukaze and Strange Rectangle CodeForces - 1191F (树状数组,计数)
大意: 给定$n$个平面点, 定义集合$S(l,r,a)$表示横坐标$[l,r]$纵坐标$[a,\infty]$内的所有点. 求可以得到多少种不同的集合. 从上往下枚举底层最右侧点, 树状数组统计贡献 ...
- Codeforces 1190D. Tokitsukaze and Strange Rectangle
传送门 注意到矩形往上是无限的,考虑把点按 $y$ 从大到小考虑 对于枚举到高度为 $h$ 的点,设当前高度大于等于 $h$ 的点的所有点的不同的 $x$ 坐标数量为 $cnt$ 那么对于这一层高度 ...
- Codeforces Round #430 (Div. 2) 【A、B、C、D题】
[感谢牛老板对D题的指点OTZ] codeforces 842 A. Kirill And The Game[暴力] 给定a的范围[l,r],b的范围[x,y],问是否存在a/b等于k.直接暴力判断即 ...
- 学习Python--函数进阶
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
- python函数进阶(函数参数、返回值、递归函数)
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...
- python基础7 - 函数2
4. 使用元组让函数返回多个值 利用 元组 同时返回温度和湿度 def measure(): """返回当前的温度""" temp = 39 ...
随机推荐
- iframe嵌套登录页-页面无法加载
背景 活动页面和登录页跨域,过去都是跳转到登录页登录之后再跳转回来,体验不好. 现在需要将登录模块嵌入到活动页,因为懒,不想开发重复的模块,首先我想到的是iframe 刚开始还能正常使用,一段时间后安 ...
- Java实用小工具系列2---使用StopWatch统计多个任务耗时分布
在Java中经常需要统计程序的使用时间,如果只是一个时间段统计比较好处理,可以直接使用System.currentTimeMillis().但如果一个程序中包含多个步骤,需要统计每个步骤耗时,并且需要 ...
- Java日期时间API系列35-----Jdk8中java.time包中的新的日期时间API类应用,微秒和纳秒等更精确的时间格式化和解析。
通过Java日期时间API系列1-----Jdk7及以前的日期时间类中得知,Java8以前除了java.sql.Timestamp扩充纳秒,其他类最大只精确到毫秒:Java8 time包所有相关类都支 ...
- 封装 axios 拦截器
import axios from "axios"; // 自定义一个 request 实例 const request = axios.create({ baseURL: &qu ...
- 2. 说一下vue2和vue3的区别 ?
1. vue3 使用 proxy 替换Object.defineProperty 实现数据响应式 ,所以vue3 的性能得到了提升 : 2. vue3 使用组合式 API 替代了 vue2 中的选项式 ...
- day08-数据类型拓展及面试题
数据类型拓展及面试题 整数拓展----进制 //整数拓展----进制 int i=10;//十进制 不能以0开头,0~9 int i1=0b11;//二进制:0 ...
- linux运维巡检脚本
#!/bin/bash#author by acrossyao#date: 2021-02-08#张波勇巡检脚本echo "--------------------------------- ...
- 在 Kubernetes 中基于 StatefulSet 部署 MySQL(上)
大家好,我是老 Z! 本文实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化这种形式.下一篇文章将会涉及 GitOps 的基础操作,部署过程 ...
- 详解 Hough 变换(基本原理与直线检测)
Hough 变换原理与应用 前言: 详细介绍了 Hough 变换的基本思想.基本原理和应用等.其中大多都是自己的理解,难免有偏差,仅供参考. 文章目录 Hough 变换原理与应用 1. 基本概述 1. ...
- 第八届御网杯线下赛Pwn方向题解
由于最近比赛有点多,而且赶上招新,导致原本应该及时总结的比赛搁置了,总结来说还是得多练,因为时间很短像这种线下赛,一般只有几个小时,所以思路一定要清晰,我还是经验太少了,导致比赛力不从心,先鸽了~ S ...