BZOJ原题链接

洛谷原题链接

线段树合并裸题。

因为交换子树只会对子树内部的逆序对产生影响,所以我们计算交换前的逆序对个数和交换后的个数,取\(\min\)即可。

对每个叶子节点建一棵动态开点线段树,然后向上合并并更新答案。

而逆序对可以在线段树合并的过程中算出来,因为是权值线段树,根据\(mid\)计算贡献即可。

这题洛谷和\(BZOJ\)不卡常,而\(LOJ\)丧心病狂地把每个点开到\(160ms\),我这份代码需要改成超级快读才能卡过。。

#include<cstdio>
using namespace std;
typedef long long ll;
const int N = 8e6 + 10;
int L[N], R[N], S[N], BT, SEG, n;
ll s, s_1, s_2;
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
inline ll minn(ll x, ll y){ return x < y ? x : y; }
void bu(int &r, int x, int y, int k)
{
r = ++SEG;
S[r] = 1;
if (!(x ^ y))
return;
int mid = (x + y) >> 1;
k <= mid ? bu(L[r], x, mid, k) : bu(R[r], mid + 1, y, k);
}
int merge(int x, int y)
{
if (!x)
return y;
if (!y || !(x ^ y))
return x;
s_1 += 1LL * S[R[x]] * S[L[y]];
s_2 += 1LL * S[L[x]] * S[R[y]];
L[x] = merge(L[x], L[y]);
R[x] = merge(R[x], R[y]);
S[x] = S[L[x]] + S[R[x]];
return x;
}
int dfs()
{
int r, x, y, ro = 0;
r = re();
if (r)
{
bu(ro, 1, n, r);
return ro;
}
x = dfs();
y = dfs();
s_1 = s_2 = 0;
ro = merge(x, y);
s += minn(s_1, s_2);
return ro;
}
int main()
{
n = re();
dfs();
printf("%lld", s);
return 0;
}

最新文章

  1. Rust语言的多线程编程
  2. python画柱状图
  3. 装饰模式(Decorate Pattern)
  4. Fegla and the Bed Bugs 二分
  5. windows下顽固软件卸载不了的解决方法
  6. int string相互转换
  7. [jobdu]不用加减乘除做加法
  8. Excel表格中汉字转拼音
  9. 解析Infopath生成的XSN结构
  10. SQL 使用存储过程创建报表的一点体会
  11. WP-player——WordPress的一款好用的音乐插件
  12. UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character &#39;\xa0&#39; in position 1987: illegal multibyte sequence
  13. POJ 2135 最小费用最大流
  14. 图的最小环floyed
  15. LOJ2014 SCOI2016 萌萌哒 并查集、ST表优化连边
  16. B1016. 部分A+B
  17. input时间表单默认样式修改(input[type=&quot;date&quot;])
  18. layer知识点总结
  19. eclipse----&gt;error and exception 和常用配置
  20. 10分钟10行代码开发APP(delphi 应用案例)

热门文章

  1. scoping作用域,anonymous function匿名函数,built-in functions内置函数
  2. 黄聪:C#使用Application.Restart重启程序出错解决办法
  3. mosquitto centos安装配置
  4. ubuntu crontab python 定时任务备记
  5. Java面试知识点
  6. Cache基本原理之:结构
  7. route命令详解
  8. DOCKER解析(转)
  9. HALCON示例:BOTTLE.HDEV 光学字符识别(分割OCR)
  10. win10系统goole浏览器安装postMan插件