题意

第一行输入一个正整数 \(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的更多相关文章

  1. codeforces 373 A - Efim and Strange Grade(算数模拟)

    codeforces 373 A - Efim and Strange Grade(算数模拟) 原题:Efim and Strange Grade 题意:给出一个n位的实型数,你可以选择t次在任意位进 ...

  2. CTF web题型解题技巧

    工具集 基础工具:Burpsuite,python,firefox(hackbar,foxyproxy,user-agent,swither等) 扫描工具:nmap,nessus,openvas sq ...

  3. codeforces 842 D. Vitya and Strange Lesson(01字典树+思维+贪心)

    题目链接:http://codeforces.com/contest/842/problem/D 题解:像这种求一段异或什么的都可以考虑用字典树而且mex显然可以利用贪心+01字典树,和线段树差不多就 ...

  4. Codeforces - 1191F - Tokitsukaze and Strange Rectangle - 组合数学 - 扫描线

    https://codeforces.com/contest/1191/problem/F 看了一下题解的思路,感觉除了最后一段以外没什么启发. 首先离散化x加快速度,免得搞多一个log.其实y不需要 ...

  5. Tokitsukaze and Strange Rectangle CodeForces - 1191F (树状数组,计数)

    大意: 给定$n$个平面点, 定义集合$S(l,r,a)$表示横坐标$[l,r]$纵坐标$[a,\infty]$内的所有点. 求可以得到多少种不同的集合. 从上往下枚举底层最右侧点, 树状数组统计贡献 ...

  6. Codeforces 1190D. Tokitsukaze and Strange Rectangle

    传送门 注意到矩形往上是无限的,考虑把点按 $y$ 从大到小考虑 对于枚举到高度为 $h$ 的点,设当前高度大于等于 $h$ 的点的所有点的不同的 $x$ 坐标数量为 $cnt$ 那么对于这一层高度 ...

  7. 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.直接暴力判断即 ...

  8. 学习Python--函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...

  9. python函数进阶(函数参数、返回值、递归函数)

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...

  10. python基础7 - 函数2

    4. 使用元组让函数返回多个值 利用 元组 同时返回温度和湿度 def measure(): """返回当前的温度""" temp = 39 ...

随机推荐

  1. 随心所动,厂商的CPU核管理策略介绍

    一.引文 随着CPU架构的发展,工艺的升级,带来性能提升,能效的提升(同性能下).但是由于极限性能的增加,也带来了peak功耗的增加(大部分情况下,能效比的提升无法抵消这部分),CPU功耗优化一直是广 ...

  2. signalR的身份认证

  3. slot原理

    vue提供组件插槽能力, 允许开发者在封装组件时,把不确定的部分定义为插槽 : 作用:再不确定的内容位置占位,在子组件内使用 slot 标签写占位的内容 : 插槽的分类 : 默认插槽: 具名插槽:使用 ...

  4. 百度ai只能回答怎么关闭

        百度ai只能回答怎么关闭 要关闭‌百度的AI智能回答功能,可以通过以下几种方法实现: 使用广告拦截插件 安装广告拦截插件:如‌AdGuard.‌uBlock Origin等,这些插件可以帮助你 ...

  5. 新东方在有状态服务 In K8s 的实践

    作者|周培,新东方架构部容器组专家 有状态服务建设一直以来都是 K8s 中非常具有挑战性的工作,新东方在有状态服务云化过程中,采用定制化 Operator 与自研本地存储服务结合的模式,增强了 K8s ...

  6. 云原生周刊 | 2023 年热门:云 IDE、Web Assembly 和 SBOM | 2023-02-20

    在 CloudNative SecurityCon 上,云原生计算基金会的首席技术官 Chris Aniszczyk 在 The New Stack Makers 播客的这一集中强调了 2023 年正 ...

  7. CSS动画(波光粼粼登录页面)

    1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa4AbemkU3vLRIDzTIgPHSjicia97wfvMVAhqZL4lsGbQQCbsV ...

  8. 01_GoLand debug时出现Connected并且程序卡住的问题

    01_GoLand debug时出现Connected并且程序卡住的问题 环境:win10.go version go1.19.4 windows/amd64.GoLand 2020.3.5 x64 ...

  9. 《JVM第6课》本地方法栈

    1 什么是本地方法 首先要知道什么是本地方法,本地方法并不是 JVM 自己的方法,也不是 jre 里面的方法,而是指那些操作系统自己的方法(如C/C++方法),它们在操作系统目录里.可以这么理解,本地 ...

  10. 关于STL容器的简单总结

    关于STL容器的简单总结 转载自 1.结构体中重载运算符的示例 //结构体小于符号的重载 struct buf { int a,b; bool operator < (const buf& ...