题目链接:
Click here

Solution

设 v a l i val_i vali​表示 i i i与它后面的数形成的逆序对个数。 a n s ans ans为原来数列逆序对个数。
每次询问一个 x x x,对于满足 i &gt; = x i&gt;=x i>=x并且 a i &lt; = a x a_i&lt;=a_x ai​<=ax​的所有 i i i,若 j &gt; i j&gt;i j>i并且 a j &lt; a i a_j&lt;a_i aj​<ai​,那么 ( i , j ) (i,j) (i,j)形成了逆序对。但由于 a j &lt; a i &lt; = a x a_j&lt;a_i&lt;=a_x aj​<ai​<=ax​,所以这些 j j j都会被排好序,变成了 j &gt; i j&gt;i j>i并且 a j &gt; a i a_j&gt;a_i aj​>ai​,这些 i i i的逆序对也就全都被消去了,也就是说 a n s ans ans要减去这些 v a l i val_i vali​。
直接上树套树orCDQ?不存在的。因为一个 i i i在某一次询问被消去影响之后,就不会再被消去,所以在线的做法没法做。那么考虑离线,按照询问的修改位置排序,询问 x x x能够消去位置 i i i的影响的条件是 x &lt; = i x&lt;=i x<=i且 a i &lt; = a x a_i&lt;=a_x ai​<=ax​。设 t x t_x tx​表示 x x x是第几个询问,那么 i i i最早消去影响的时间就是满足 x &lt; = i x&lt;=i x<=i且 a i &lt; = a x a_i&lt;=a_x ai​<=ax​的最小的 t x t_x tx​。
这是个二维偏序问题,按照 x x x排序后一维被消掉,条件 a i &lt; = a x a_i&lt;=a_x ai​<=ax​用树状数组维护后缀最小值即可。
至于当询问 y y y对应的 a y a_y ay​被某个询问 x x x修改的情况,我们只需要用原来没被修改过的的 a y a_y ay​即可,因为如果 y y y被 x x x改了,说明 y y y后面的逆序对早就被询问 x x x消完了,我们即使把这个询问加进去也不会影响答案。
然后此题完。

Code

由于using namespace std被ban掉了,为了巩固基础知识,我自己实现了归并排序、离散化、二分等算法,导致码量大了一点,但是让我对基础算法理解加深了更多。

#include <cstdio>
#include <cstring>
#include <cstdlib>typedef long long ll;
const int N = 100007;
const ll INF = 0x3f3f3f3f;
int min(int a, int b) { return a < b ? a : b; }int n, m, len, a[N], val[N], arr[N], temp[N];
ll sum[N];struct note { int po, tim, val; } q[N], tmp[N];
int operator<(note a, note b) { return a.po < b.po; }void sortq(int l, int r)
{if (l == r) return;int mid = l + r >> 1;sortq(l, mid), sortq(mid + 1, r);int i = l, j = mid + 1, len = 0;while (j <= r){while (i <= mid && q[i] < q[j]) tmp[++len] = q[i++];tmp[++len] = q[j++];}while (i <= mid) tmp[++len] = q[i++];for (int i = 1; i <= len; i++) q[l + i - 1] = tmp[i];
}
void sort(int l, int r)
{if (l == r) return;int mid = l + r >> 1;sort(l, mid), sort(mid + 1, r);int i = l, j = mid + 1, len = 0;while (j <= r){while (i <= mid && arr[i] <= arr[j]) temp[++len] = arr[i++];temp[++len] = arr[j++];}while (i <= mid) temp[++len] = arr[i++];for (int i = 1; i <= len; i++) arr[l + i - 1] = temp[i];
}
void unique()
{len = 0;int i = 1;while (i <= n){arr[++len] = arr[i++];while (i <= n && arr[i] == arr[i - 1]) i++;}
}
int lower_bound(int val)
{int l = 1, r = len, mid, ans;while (l <= r){mid = l + r >> 1;if (arr[mid] >= val) r = mid - 1, ans = mid;else l = mid + 1;}return ans;
}
int tr[N][2];
void add(int po, int k, int v)
{for (; po <= n; po += (po & (-po))){if (k) tr[po][k] = min(tr[po][k], v);else tr[po][k] += v;}
}
int query(int po, int k)
{int ret = k ? INF : 0;for (; po; po -= (po & (-po))){if (k) ret = min(ret, tr[po][k]);else ret += tr[po][k];}return ret;
}int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) scanf("%d", a + i);memcpy(arr, a, sizeof(a));sort(1, n);unique();for (int i = n; i >= 1; i--) a[i] = lower_bound(a[i]), val[i] = query(a[i] - 1, 0), add(a[i], 0, 1), sum[0] += val[i];for (int i = 1; i <= m; i++) scanf("%d", &q[i].po), q[i].tim = i, q[i].val = a[q[i].po];sortq(1, m);for (int i = 1; i <= n; i++) tr[i][1] = INF;for (int i = 1, j = 1; i <= n; i++){while (j <= m && q[j].po <= i) add(len - q[j].val + 1, 1, q[j].tim), j++;int ret = query(len - a[i] + 1, 1);if (ret < INF) sum[ret] -= val[i];}printf("%lld\n", sum[0]);for (int i = 1; i <= m; i++) sum[i] += sum[i - 1], printf("%lld\n", sum[i]);return 0;
}

JZOJ 5222. 【GDOI2018模拟7.12】A (Standard IO)相关推荐

  1. 5222. 【GDOI2018模拟7.12】A

    Description Input Output Sample Input 3 2 2 3 1 1 1 Sample Output 2 1 1 Data Constraint Hint Solutio ...

  2. 【JZOJ5224】【GDOI2018模拟7.12】C

    Description Data Constraint Solution 首先必须讲讲自然数幂求和. 我们设 Sk(n)=∑i=1nik Sk(n)=\sum_{i=1}^ni^k 我们用第一类斯特林 ...

  3. jzoj5224 [GDOI2018模拟7.12]C 杜教筛+自然数幂和

    Description 求 ∑i=1n∑j=1ngcd(i,j)k且n≤1010,k≤5 ∑ i = 1 n ∑ j = 1 n gcd ( i , j ) k 且 n ≤ 10 10 , k ≤ 5 ...

  4. 【JZOJ5222】【GDOI2018模拟7.12】A

    Description 注意:题意有误,IQ小于等于的都会听从指挥 Data Constraint Solution 这道题,有两个坑,首先,IQ小于等于的都会听从指挥,这在做题时居然没讲,居然还有人 ...

  5. Cisco PT模拟实验(12) 路由器静态路由的配置

    Cisco PT模拟实验(12) 路由器静态路由的配置 实验目的: 掌握静态路由的配置方法和应用 掌握路由选择表中的路由描述 熟悉路由选择和分组转发的原理及过程 实验背景: 某公司除总部外,另有一处分 ...

  6. 2554. 【NOIP2011模拟9.7】帕秋莉·诺蕾姬 (Standard IO)

    2554. [NOIP2011模拟9.7]帕秋莉·诺蕾姬 (Standard IO) Description 在幻想乡,帕秋莉·诺蕾姬是以宅在图书馆闻名的魔法使.这一天帕秋莉又在考虑如何加强魔法咒语的 ...

  7. JZOJ 1775. 合并果子2 (Standard IO)

    1775. 合并果子2 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 在一个果园里,多多已经将所有的果子 ...

  8. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  9. 1116. 【HNOI2008】T_OY(踢欧阳^_^) (Standard IO)斜率优化dp

    1116. [HNOI2008]T_OY(踢欧阳^_^) (Standard IO) Time Limits: 1000 ms  Memory Limits: 65536 KB  Detailed L ...

最新文章

  1. Win7编译volley成jar包
  2. 手机拍照软件for android1.6,RookieCam
  3. Android的目录结构说明
  4. POJ 2356 Find a multiple (抽屉原理)
  5. 这是高手最常用的第一快捷组合键 - imsoft.cnblogs
  6. 如何理解 SAP UI5 的 sap.ui.define 函数
  7. 瑞星布局:安全软件的时尚模式
  8. 苹果留给 iOS 开发者的时间不多了:30 天内必须更新旧版本
  9. 2017.8.15 数据库
  10. Ansys 2022R2安装教程
  11. IDEA查看Java源码技巧
  12. java 机器学习库_7个最好的Java机器学习开发库
  13. C#个人邮箱发邮件给多个邮箱
  14. 云计算革命-IT产业第三次变革,将如何影响人类社会
  15. 程序化交易入门(一)
  16. Java二维码编码识别
  17. 记录通过的阿里云认证
  18. mysql关闭空闲连接_终止空闲的mysql连接
  19. 应用层协议 HTTP HTTPS
  20. JAVA与海康威视人脸机对接,使用ISUP方式

热门文章

  1. 云计算推动在线教育发展,武汉大学探索高校教育新模式
  2. 一、5.8GHz射频接收机链路仿真
  3. 利用word漏洞制作Windows反弹木马
  4. Linux系统对于实施人员的价值
  5. 美女画画赚钱月入10万,不懂画画你也可以月入1万
  6. mysql 查询数据条数_MySQL优化总结-查询总条数
  7. python代码模板_代码风格与文件模板
  8. 长沙理工集训队-9.11日组队赛
  9. networkx 判断异质图同构
  10. Thinkpad T460P安装win7