[国家集训队]排队 [cdq分治]】的更多相关文章

题面 洛谷 和动态逆序对那道题没有什么区别 把一个交换换成两个删除和两个插入 #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> #include <cstring> using namespace std; const int N = 1e5 + 5; const double eps = 1e-9; const int inf = 0x3f3f3…
[LG1975][国家集训队]排队 题面 洛谷 题解 又是一个偏序问题 显然\(CDQ\) 交换操作不好弄怎么办? 可以看成两次删除两次插入 排序问题要注意一下 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #include <vector&g…
Luogu-1975 [国家集训队]排队 题面 Luogu-1975 题解 题意:给出一个长度为n的数列以及m个交换两个数的操作,问每次操作后逆序对数量 时间,下标和数的大小三维偏序,,,把交换操作看成是减去两个数再加上两个数,套板子就好了 发现这种计数类型的CDQ一般有两种写法: 按a排序,CDQ内先递归左右两边让b有序后扫一遍用左边更新右边 按b排序,CDQ内先按照a与mid的关系分为两部分,用前面更新后面,然后递归两边 感觉应该都差不多,但有些题目用两种方式写也有一些优劣之分,比如这道题,…
题意: 交换序列中两个元素,求逆序对 做分块做到这道题...一看不是三维偏序嘛.... 作为不会树套树的蒟蒻就写CDQ分治吧.... 对时间分治...x排序...y树状数组... 交换拆成两个插入两个删除,保存一下类型就行了 才发现逆序对问题的删除操作不用时间倒流也可以,直接减去它形成的逆序对数并且在树状数组中删除就可以了 然后愚蠢的我竟然把操作的时间弄成相同的调了一会才觉得不对.... #include <iostream> #include <cstdio> #include…
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2141 思路: 其实就是求动态逆序对...cdq降维,用树状数组前后求两遍逆序对就好了 切水题真爽QAQ 实现代码: #include<bits/stdc++.h> using namespace std; #define ll long long ; ],a[M],b[M],ans[M]; int n,m; struct node{ int x,y,t; int kind,id; no…
思路 序列中 |i | 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| |----|--|--|--|--|--|--|--|--|--|--| |a[i]| a| b| c| L| d| e| f| R| g| h| 现逆序对为ans,要交换L,R 则\([1,3],[9,10]\)这两段区间的都不会被他俩影响 (因为L,R和他们相对位置没变啦) 所以现在我们只需要考虑区间\([4,8]\)就好,其他的不考虑在内 一个数对一个区间产生逆序对的贡献为 ① 前面大于他的数的个数 (在…
题目链接 题意分析 我们考虑 交换两个数\([le,ri]\)的贡献 减少的逆序对数\([le,ri]\)中小于\(num[le]\)以及大于\(num[ri]\)的数 增加的\([le,ri]\)中大于\(num[le]\)以及小于\(num[ri]\)的数 同时注意 如果\(num[le]!=num[ri]\) 二者相互的贡献 就多算了一次 所以我们需要特判一下 至于修改和查询 我们可以使用树套树维护 CODE: #include<iostream> #include<cstdio&…
$ \color{#0066ff}{ 题目描述 }$ 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和. 红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别,排成的队伍高低错乱,极不美观.设第i个小朋友的身高为hi,我们定义一个序列的杂乱程度为:满足ihj的(i,j)数量. 幼儿园阿姨每次会选出两个小朋友,交换他们的位置,请你帮忙计算出每次交换后,序列的杂乱程度.为方便幼儿园阿姨统计,在未进行任何交换操作时,…
题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和. 红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别,排成的队伍高低错乱,极不美观.设第i个小朋友的身高为hi,我们定义一个序列的杂乱程度为:满足i<j且hi>hj的(i,j)数量. 幼儿园阿姨每次会选出两个小朋友,交换他们的位置,请你帮忙计算出每次交换后,序列的杂乱程度.为方便幼儿园阿姨统计,在未进行任何交换操作时,你也应该输出该序列的杂乱程度.…
传送门 直接暴力分块,然后在每一个块内排序. 查询时可以在每一个块内二分. #include <cmath> #include <cstdio> #include <iostream> #include <algorithm> #define M 210 #define N 20101 using namespace std; int n, m, t, S, C, ans; int a[N], b[N], c[N], st[M], ed[M], belong…