题目 传送门:QWQ 分析 思维要求比较高. 首先我们要把原图的逆序对q算出来. 这个树状数组或归并排序都ok(树状数组不用离散化好评) 那么翻转$[l,r]$中的数怎么做呢? 暴力过不了,我试过了. 设$ t=r-l+1 $即为区间长度 那么区间数对数量(看好是所有数对,不是逆序对)的数量就是$ k =\frac{n\times(n-1)}{2} $ 方法是我们判断一下数量k的奇偶性,如果是奇数的,那么就把$ q $的奇偶性变一变. 然后判断q的奇偶性输出就行. 为什么这样是对的呢? 首先翻转…
题目链接:Inversion Counting 题意: 定义数列{ai|i=1,2,...,n}的逆序对如下:对于所有的1≤j<i≤n,若ai<aj,则<i,j>为一个逆序对.于是,对于一个数列a[1..n],给定m次操作.对于每一次操作,给定l,r(1≤l<r≤n),将序列a[l..r]倒置.求倒置后的逆序对的数量的奇偶性. 题解: 假设现在我们有一个序列并翻转这个序列[l,r]区间里面的数.假设某个数的k值是指在这个值后面小于这个数的数的个数,其实我们可以发现对于[1,l…
``Dynamic'' Inversion Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3141 Description You are given a permutation f1,2,3,. . . ,ng. Remove m of them…
题目大意:给你两列数\(ai\)和\(bi\),你可以交换每列数中相邻的两个数,求一个最小交换次数使\(\sum_{i=1}^{n}(a_i-b_i)^2\) 最小. 最后满足条件的两个序列一定是各个数在各自序列中排名相等的情况(证明不会).那么我们可以先把两个数组进行离散化,然后将其中一个数组以另一个数组为基准进行排序,构造出一个新数列,它应该是最后合法的序列.从原序列变到这里的步数怎么求?就是逆序对了.因为要变成升序(相对原来的数的位置).这里用的是线段树. #include<cstdio>…
A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #define TS printf("!!!\n") #define pb push_back #define inf 0x3f3f3f3f //std::ios::sync_with_stdio(false); using namespace std; //priority_queue<i…
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 18543    Accepted Submission(s): 11246 Problem Description The inversion number of a given number sequence a1, a2, ..., a…
仍旧在练习线段树中..这道题一开始没有完全理解搞了一上午,感到了自己的shabi.. Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15527 Accepted Submission(s): 9471 Problem Description The inversion number of a…
B. Anton and Lines Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/593/problem/B Description The teacher gave Anton a large geometry homework, but he didn't do it (as usual) as he participated in a regular round on Codeforc…
Inversion Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5497 Description 你有一个序列\{a_1,a_2,...,a_n\}{a​1​​,a​2​​,...,a​n​​},然后你可以删除一个长度为mm的连续子序列. 问如何删除才能使逆序对最少. Input 输入有多组数据, 第一行有一个整数TT表示测试数据的组数. 对于每组数据: 第一行包含2个…
Inversion Time Limit 1s Memory Limit 131072KB Judge Program Standard Ratio(Solve/Submit) 15.00%(3/20) Description: bobo has a sequence a1,a2,…,an. He is allowed to swap two adjacent numbers for no more than k times. Find the minimum number of inversi…
题目:codeforces 459D - Pashmak and Parmida's problem 题意:给出n个数ai.然后定义f(l, r, x) 为ak = x,且l<=k<=r,的k的个数.求 i, j (1 ≤ i < j ≤ n) ,f(1, i, ai) > f(j, n, aj).,有多少对满足条件的i.j. 分类:逆序数.线段树.离散化, 分析:这是一道不错的数据结构题目,比較灵活. 推一下第一组例子之后发现时让求一个逆序数的题目.可是不是单纯的求逆序数. 第一…
  评测传送门 [问题描述] 有一个1 − n的排列,你会依次进行m次操作,第i次操作表示为(x i , y i ),交换以这两个 值为下标的元素,每次操作有一半的概率成功,你需要求出最后序列的逆序对的期望个数.[输入] 输入文件 inversion.in. 第一行两个数n, m. 第二行n个数表示初始的排列. 接下来m行,每行两个数表示x i , y i .[输出] 输出文件 inversion.out. 一个实数表示答案,四舍五入保留到小数点后 8 位,要求绝对误差不超过 10 -6 . (…
HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对最少的个数. 前置技能 环序列 还 线段树的逆序对求法 逆序对:ai > aj 且 i < j ,换句话说数字大的反而排到前面(相对后面的小数字而言) 环序列:把第一个放到最后一个数后面,就是一次成环,一个含有n个元素序列有n个环序列. 线段树的逆序对求法:每个叶子节点保存的是当前值数字的个数.根…
题目链接:http://codeforces.com/problemset/problem/351/B 题意: 给你一个1到n的排列a[i]. Jeff和Furik轮流操作,Jeff先手. Jeff每次会交换a[i]>a[i+1]的两个数. Furik每次有1/2的概率交换a[i]<a[i+1]的两个数,有1/2的概率交换a[i]>a[i+1]的两个数. 当这个排列变成升序时,游戏停止. 问你操作数的期望. 题解: 假设原序列中有t个逆序对. 那么将这个序列变成升序,就是将这t个逆序对一…
逆序对(inversion) 题目描述 对于序列AA,它的逆序对数定义为满足i<ji<j,且Ai>AjAi>Aj 的数对i,ji,j的个数. 现给你11到nn的一个排列,并按照某种顺序依次删除mm个元素.现请你求出在每次删除一个元素之前整个序列的逆序对总个数. 输入 第一行包含两个整数nn和mm. 第二行包含nn个数,代表初始序列. 接下来的mm行,每一个整数表示第ii行,每一个整数表示第ii次删除的数(保证在此之前未曾删除过). 输出 共mm行,表示第ii次删数前整个序列的逆对总…
DCE Coders admins are way much geekier than they actually seem! Kartik has been following that tradition lately. How? Well, he took the inversion count problem to a whole new level! Sounds pretty normal to you, huh? Wanna challenge him? Try solving h…
传送门:https://codeforces.com/contest/540/problem/E 题意: 有一段无限长的序列,有n次交换,每次将u位置的元素和v位置的元素交换,问n次交换后这个序列的逆序对个数为多少 题解: 因为值域范围为1e9,而n的范围只有1e5,所以我们肯定是不能直接交换的,对n次操作离散化,离散化后的数组最大为2e5,这里需要用到一些离散化的技巧. 将每次交换的u,v两个点放到map里面,键为pos,值为0 然后对于map映射,值就是离散化后的下标 离散化后我们应该做什么…
Minimum Inversion Number HDU - 1394 求最小反转数,就是求最少的逆序对. 逆序对怎么求,就是先把所有的数都初始化为0,然后按照顺序放入数字,放入数字前查询从这个数往后面的数的位置是不是被占了,被占了说明有逆序对. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> #define debug(n) printf(&qu…
题目链接:https://codeforces.com/contest/1427/problem/D 题意 给出一个大小为 \(n\) 的排列,每次操作可以将 \(n\) 个数分为 \(1 \sim n\) 个非空连续份,然后将对称的份两两交换,试给出在 \(n\) 次操作内将排列排为升序的操作过程. 题解 找到值相差为 \(1\) 的逆序对:\(i<j\),\(a_i = a_j + 1\) 将已为升序的数视为一个整体,找到 \(t\) 满足 \(i \le t < j\),\(a_t &g…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题目让你求一个数组,这个数组可以不断把最前面的元素移到最后,让你求其中某个数组中的逆序对最小是多少. 一开始就求原来初始数组的逆序对,树状数组求或者归并方法求(可以看<挑战程序设计>P178),然后根据最前面的元素大小递推一下每次移到最后得到的逆序数,取最小值. #include <iostream> #include <cstdio> #include <cs…
题意: 给出一个长度为n的序列,求出是谁操作的(原序列为从小到大的序列),Peter的操作次数为3n,Alex的操作次数为7n+1 解析: 我们来看这个序列中的逆序对,逆序对的个数为偶数则操作次数为偶数,逆序对的个数为奇数,则操作次数为奇数 然后树状数组求逆序对即可 #include <bits/stdc++.h> #define mem(a, b) memset(a, b, sizeof(a)) using namespace std; , INF = 0x7fffffff; int c[m…
题意:初始有一个序列[1,2,...N],一次操作可以将任意两个位置的值互换,Petr做3*n次操作:Alxe做7*n+1次操作.给出最后生成的新序列,问是由谁操作得到的. 分析:一个序列的状态可以归为:由原序列操作奇数次得到(简称奇序列):和操作偶数次(偶序列)得到.显然奇序列中,逆序对的个数为奇数:偶序列中,逆序对的个数为偶.当n为奇数时,3*n为奇,7*n+1为偶:n为偶数时正好相反. 用树状数组或归并排序求逆序对即可. #include<iostream> #include<st…
题目链接: D. Pashmak and Parmida's problem time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Parmida is a clever girl and she wants to participate in Olympiads this year. Of course she wants her…
题意:给你n张卡,每张卡上有蓝色和红色的两种数字,求一种排列使得对应颜色数字之间形成的逆序对总数最小 题解:贪心,先按蓝色排序,数字相同再按红色排,那么蓝色数字的逆序总数为0,考虑交换红色的数字消除逆序, 那么这个操作的代价是蓝色的数字逆序对增加2*len-3,而红色的数字交换最多也只能消除那么多对逆序对.不会比当前更优. 因为数据范围比较大,用树状数组,线段树,可能要离散,所以学习了归并排序的方法来求逆序对总数. 思路大概是,归并之前的左右两个序列是已经排好序的,分别叫做L和R,如果L(i)>…
题目链接: C. Mashmokh and Reverse Operation time limit per test 4 seconds memory limit per test 512 megabytes input standard input output standard output Mashmokh's boss, Bimokh, didn't like Mashmokh. So he fired him. Mashmokh decided to go to university…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排列中交换任意两个数字. 排列的逆序对个数的奇偶性会发生变化. 翻转这个过程其实就是len/2对数字发生交换. 交换了偶数次的话,不变,否则奇偶性发生改变. 先暴力求出一开始的逆序对个数就好 [代码] #include <bits/stdc++.h> using namespace std; const int N = 1500; int n,a[N+10],cnt,now,m; void out(int x){ if (x=…
A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_back using namespace std; typedef long long ll; typedef unsigned long long ull; ][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }}; ; + + + + 1e9…
题目链接 题目大意 给你一个长度为n的字符串,可以交换相邻两个元素,使得这个字符串翻转,求最少多少种次数改变 题目思路 如果要求数组排序所需要的冒泡次数,那其实就是逆序对 这个也差不多,但是如果是相同字符,用的应该是对应的最近的这个字母. 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e5+5; int n,cnt[30],ans[maxn],tree[maxn<…
题意:给你一个字符串,每次可以调换现字符串的相邻两个字符,问最少操作多少次使得这个字符串等于其反转过来的字符串. 题解:先考虑字符串中没有相同字符的情况,那么我们每次将目前字符串的最后一个字符一直调换到前面就行,如果出现相同字符的话,先让最靠前的字符调换到对应位置一定是最优的.我们先记录原字符串中每个字符的位置,然后将字符串反转,根据反转后的字符位置弄一个新数组,注意相同字符一定要把小的位置放在前面,然后用树状数组求个逆序对即可. 代码: #define int long long int n;…
http://codeforces.com/problemset/problem/911/D 题意 给你一个长度为N的序列,有M次操作.每次翻转[l,r]的区间,每次操作后询问序列逆序对个数的奇偶性 很显然问题每次操作之后的变化数量只与区间内自身的逆序数对有关,比较麻烦的操作是翻转的操作. 但是本题的问题是逆序数对的奇偶性,事实上经过仔细的比较发现,整个序列翻转后的逆序数对与被翻转的区间内数字无关,只和区间长度有关. 区间(l,r)内所有数字的对数是(r - l + 1) * (r - l) /…