整理手套
来源:互联网 发布:linux c list用法 编辑:程序博客网 时间:2024/06/03 03:09
Description
Solution
可见手套的编号对于解决问题是没有关系的,于是我们对手套重新按出现时间编号。可见答案就是新序列的逆序对数量。
因为存在重复元素,所以采用归并排序来求逆序对。
#include<bits/stdc++.h>using namespace std;#define N 400001#define rep(i, a, b) for (int i = a; i <= b; i++)#define ll long longinline int read() { int x = 0, flag = 1; char ch = getchar(); while (!isdigit(ch)) { if (!(ch ^ '-')) flag = -1; ch = getchar(); } while (isdigit(ch)) x = (x << 1) + (x << 3) + ch - '0', ch = getchar(); return x * flag;}int n, a[N], b[N], t[N], tot;ll ans;void merge(int l, int r) { if(!(l ^ r)) return; int m = l + r >> 1; merge(l, m), merge(m + 1, r); int p = l, q = m + 1, k = l; while(p <= m && q <= r) if(a[p] <= a[q]) t[k++] = a[p++]; else t[k++] = a[q++], ans += q - k; while(p <= m) t[k++] = a[p++]; while(q <= r) t[k++] = a[q++]; rep(i, l, r) a[i] = t[i];}int main() { n = read() << 1; rep(i, 1, n) if(!b[(a[i] = read())]) b[a[i]] = ++tot; rep(i, 1, n) a[i] = b[a[i]]; merge(1, n); cout << ans; return 0;}
阅读全文
0 0
- 整理手套
- 手套
- 手套问题
- 数据手套
- 【笔试】挑手套
- 20061208 被发誓的手套
- 多交互智能手套Miiglove
- 卡丁车60个级别分数手套大全
- 取同色手套的排列组合问题
- 2016暑期集训16B手套
- 南非的5DT数据手套使用说明
- USB手套,相伴一生,冬天,解放双手很重要。
- [英语阅读]杰克逊“比利•金”手套将拍卖
- [英语阅读]澳门酒店高价拍得杰克逊手套
- 乌克兰学生团EnableTalk研制手语翻译手套
- 电容屏:为什么带手套无法进行操作手机?
- 绝缘靴手套耐压试验装置_电气百科
- 智能绝缘靴手套耐压试验装置_电气…
- SSL P1643 最小乘车费用
- 转:十步制胜 Kaggle 数据科学竞赛
- 内存泄漏
- Python 字典(Dictionary) setdefault()方法
- phpstrom中自动补全命名空间
- 整理手套
- Java实现给图片添加水印详细教程二
- git使用
- 山平商贸携中企动力实现“生鲜О2О”双渠道经营
- Redis的基本参数配置和使用(一)
- 一、冒泡排序
- HOW2J——JAVA基础——数组
- java入门基础知识(三)常用关键字
- seo做好网站内部优化可以让网站更快的进入前十