\(\text{Solution}\)

当 \(m=2\) 时,\(ans=2n\sum a_{i,j}\)

当 \(m=3\) 时

当然先套路地考虑某一行的贡献,记为第 \(x\) 行

则当取 \(max\) 时有 \(a_{x,i}+a_{x,j}>a_{y,i}+a_{y,j},a_{x,i}+a_{x,j}>a_{z,i}+a_{z,j}\)

即 \(a_{x,i}-a_{y,i}>a_{y,j}-a_{x,j},a_{x,i}-a_{z,i}>a_{z,j}-a_{x,j}\)

把第 \(i\) 列看作二元组 \((a_{y,j}-a_{x,j},a_{z,j}-a_{x,j})\),询问则是 \(<(a_{x,i}-a_{y,i},a_{x,i}-a_{z,i})\) 的数量

二位偏序,树状数组即可

当 \(m=4\) 时,可以同 \(m=3\) 那样,三位偏序 \(cdq\) 分治

当然 \(\text{Min-max}\) 容斥更妙,因为

\[\min_{i\in S} x_i = \sum_{T\subseteq S} (-1)^{|T|-1} \max_{i\in T} x_i
\]

\(\max\) 同理

把 \(\min+\max\) 展开,则可以发现 \(2ans=\sum_{T\subseteq S} (-1)^{|T|-1} \max_{i\in T} x_i + \min_{i\in T} x_i\)

于是沿用 \(m=2\) 和 \(m=3\) 的做法即可

注意到这里用了严格大于小于符号,但需要考虑取等,这东西很容易算重

一个笨点的方法就是当不等式相等时,默认 \(x<y\) 的更小,\(x<z\) 的更小,将贡献放到最早的有相等的行

这需要在修改和查询时讨论相等情况

\(\text{Code}\)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define RE register
#define IN inline
using namespace std;
typedef long long LL; const int N = 2e5 + 5, len = 4e5 + 7, D = 2e5 + 3;
int m, n, a[5][N];
LL SUM, ans; IN void read(int &x)
{
char ch = getchar(); x = 0; int f = 1;
for(; !isdigit(ch); f = (ch == '-' ? -1 : 1), ch = getchar());
for(; isdigit(ch); x = (x<<3)+(x<<1)+(ch^48), ch = getchar());
x *= f;
} struct node{
int ty, x, y, v;
IN bool operator < (const node &a) const{return x < a.x ? 1 : (x == a.x ? ty < a.ty : 0);}
}Q[N * 2]; struct BIT{
int c[len + 3];
IN void init(){memset(c, 0, sizeof c);}
IN int lowbit(int x){return x & (-x);}
IN void add(int x){x += D; for(; x <= len; x += lowbit(x)) c[x]++;}
IN int Query(int x){x += D; int s = 0; for(; x; x -= lowbit(x)) s += c[x]; return s;}
}T; IN LL calc(int x, int y, int z)
{
int cnt = 0; LL res = 0;
for(RE int i = 1; i <= n; i++)
Q[++cnt] = node{1, a[y][i] - a[x][i], a[z][i] - a[x][i]},
Q[++cnt] = node{0, a[x][i] - a[y][i], a[x][i] - a[z][i], a[x][i]};
sort(Q + 1, Q + cnt + 1);
for(RE int i = 1, j; i <= cnt; i = j + 1)
{
j = i;
while (j < cnt && Q[j + 1].x == Q[i].x) ++j;
if (x < y) for(RE int k = j; k >= i; k--) if (Q[k].ty) T.add(Q[k].y);
else res += (LL)Q[k].v * T.Query(Q[k].y - 1 + (x < z));
else for(RE int k = i; k <= j; k++) if (Q[k].ty) T.add(Q[k].y);
else res += (LL)Q[k].v * T.Query(Q[k].y - 1 + (x < z));
}
T.init();
for(RE int i = cnt, j; i; i = j - 1)
{
j = i;
while (j > 1 && Q[j - 1].x == Q[i].x) --j;
if (x < y) for(RE int k = i; k >= j; k--) if (Q[k].ty) T.add(Q[k].y);
else res += (LL)Q[k].v * (T.Query(len - D) - T.Query(Q[k].y - (x < z)));
else for(RE int k = j; k <= i; k++) if (Q[k].ty) T.add(Q[k].y);
else res += (LL)Q[k].v * (T.Query(len - D) - T.Query(Q[k].y - (x < z)));
}
T.init();
return res * 2;
}
IN LL solve3(int i, int j, int k){return calc(i, j, k) + calc(j, i, k) + calc(k, i, j);}
IN LL solve2(int i, int j)
{
LL res = 0;
for(RE int x = 1; x <= n; x++) res += a[i][x] + a[j][x];
return res * n * 2;
} int main()
{
read(m), read(n);
for(RE int i = 0; i < m; i++)
for(RE int j = 1; j <= n; j++) read(a[i][j]), SUM += a[i][j];
if (m == 2) ans = solve2(0, 1);
else if (m == 3) ans = solve3(0, 1, 2);
else{
ans = SUM * n * 4;
for(RE int i = 0; i < 4; i++)
for(RE int j = i + 1; j < 4; j++) ans -= solve2(i, j);
for(RE int i = 0; i < 4; i++)
for(RE int j = i + 1; j < 4; j++)
for(RE int k = j + 1; k < 4; k++) ans += solve3(i, j, k);
ans >>= 1;
}
printf("%lld\n", ans);
}

[NOI Online 2022 提高组] 如何正确地排序的更多相关文章

  1. luogu P6570 [NOI Online #3 提高组]优秀子序列 二进制 dp

    LINK:P6570 [NOI Online #3 提高组]优秀子序列 Online 2的T3 容易很多 不过出于某种原因(时间不太够 浪了 导致我连暴力的正解都没写. 容易想到 f[i][j]表示前 ...

  2. [NOI Online 2021 提高组] 积木小赛

    思路不说了. 想起来自己打比赛的时候,没睡好.随便写了个\(HASH\),模数开小一半分都没有. 然后学了\(SAM\),发现这个判重不就是个水题. \(SAM\)是字串tire的集合体. 随便\(d ...

  3. [NOI Online #2 提高组]涂色游戏 题解

    题目描述 你有 1020 个格子,它们从 0 开始编号,初始时所有格子都还未染色,现在你按如下规则对它们染色: 编号是 p1 倍数的格子(包括 0号格子,下同)染成红色. 编号是 p2 倍数的格子染成 ...

  4. NOI On Line 提高组题解

    (话说其实我想填的是去年CSP的坑...但是貌似有一道题我还不会写咕咕咕... 先写一下这一次的题解吧. T1:序列.题意省略. 两种操作.这种题要先分析部分分 给出了全部都是2操作的子任务. 发现A ...

  5. NOI Online #2 提高组 游戏

    没用二项式反演的菜比. 题目链接 Solution 非平局代表的树上祖先关系是比较好统计,(可以在处理一个点时,考虑用他去匹配他的子树中的东西)而平局的关系比较难统计.我们不妨求出至少 \(k\) 个 ...

  6. NOI Online #2 提高组 游记

    没 NOI Online 1 挂的惨就来写游记吧,不知道为啥 NOI Online 1 民间数据测得 60 分的 T1 最后爆零了... 昏昏沉沉的醒来,吃了早饭,等到 \(8:30\) 进入比赛网页 ...

  7. NOI Online #3 提高组 T1水壶 题解

    题目描述 有 n 个容量无穷大的水壶,它们从 1∼n 编号,初始时 i 号水壶中装有 Ai 单位的水. 你可以进行不超过 k 次操作,每次操作需要选择一个满足 1≤x≤n−1 的编号 x,然后把 x ...

  8. NOI Online #3 提高组 游记

    考的好就来写游记吧 2020.5.24 星期日 上一天晚上为了班里事物做 PPT 肝到 11:30,这比赛就打打玩玩.第二天醒来有点昏昏沉沉的感觉. 打开题面,一看 T1,好像是个性质极其简单的前缀和 ...

  9. [NOI Online #3 提高组] 魔法值

    现在只会\(O(qn^3log)\)的\(40pts\)做法,鸽了. 反正就是预处理之后,去掉一个\(n\). 我预处理了,没去\(n\),hhhh,成功减少了一半的常数.

  10. 洛谷 P6570 - [NOI Online #3 提高组] 优秀子序列(集合幂级数+多项式)

    洛谷题面传送门 首先 \(3^n\) 的做法就不多说了,相信对于会状压 dp+会枚举子集的同学来说不算困难(暴论),因此这篇博客将着重讲解 \(2^nn^2\) 的做法. 首先如果我们把每个 \(a_ ...

随机推荐

  1. 07#Web 实战:实现 GitHub 个人主页项目拖拽排序

    实现效果图 GitHub 和 Gitee 个人主页中可以对自己的项目进行拖拽排序,于是我就想自己实现一个.本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程. ...

  2. VBA驱动SAP GUI自动化:查找页面元素FindAllByName

    我们在VBA中嵌入SAP原生的[脚本录制与回放]功能生成的VBS脚本,可以实现很多自动化操作.但只有我们对SAP做了一系列动作,才会得到这些动作的脚本.然而,一旦我们需要用代码提前做一些判断,然后再决 ...

  3. Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板

    前言   QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并 ...

  4. 【Java SE进阶】Day05 异常,线程

    一.异常 1.概念 程序执行过程中,出现非正常情况导致JVM的非正常停止 本身是一个类,产生异常即创建并抛出一个异常对象 Java处理异常的方式是进行中断处理 异常非语法错误,语法错误直接不会产生cl ...

  5. 利用python数据分析

    利用python进行数据分析 本书由Python pandas项目创始人Wes McKinney亲笔撰写,详细介绍利用Python进行操作.处理.清洗和规整数据等方面的具体细节和基本要点.第2版针对P ...

  6. 分布式日志:Exceptionless的安装与部署

    安装步骤 首先exceptionless依赖elasticsearch,而elasticsearch需要java环境,所以先安装jdk jdk下载地址:https://www.oracle.com/t ...

  7. P1024 [NOI2001] 食物链【种类并查集】

    题意 P1024 简化题意:给定 \(n\) 和 \(k(n\leqslant5\times10^4,k\leqslant10^5)\) ,表示有 \(n\) 个动物, \(k\) 个描述,其中: \ ...

  8. 【集成开发环境 (IDE)】Dev-Cpp下载与安装 [ 图文教程 ]

    版权声明 本文作者:main工作室 本文链接:https://www.cnblogs.com/main-studio/p/17037280.html 版权声明:本文为 博客园 博主「main工作室」的 ...

  9. 01-逻辑仿真工具VCS使用

    1 逻辑仿真工具VCS的使用 在书写完成RTL代码之后,确保自己书写的代码和自己想要的逻辑是一致的. VCS是synopsys公司下的的仿真工具. 1 VCS仿真过程 编译-->仿真--> ...

  10. 真正“搞”懂HTTP协议08之重定向

    我们知道,用来传输页面的协议就是HTTP协议,全称是超文本传输协议,而浏览器展示的页面则是用HTML编写的,HTML的全称则是超文本标记语言.你看,都叫做超文本,我在第一篇文章的时候也详细的聊过,超文 ...