摘要:
给定一组数,然后依次的挪动该组数的元素共得到n种序列。求这n中序列中逆序数最少的个数。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define N 5005int n,c[N]; int sum(int x){ int ret=0; while(x) { ret+=c[x]; x-=x 阅读全文
摘要:
题意:交换任意两个相邻奶牛的坐标,使得它们的暴怒值升序排列,题目已经限制了,每头牛的暴力值是唯一的首先,我们看到数据范围10W,暴力的话,O(N^2)必挂,然后我们想到了树状数组思路:对某个下标k,先求逆序对ans,然后已知k和前面的逆序数要两两交换,所以对于本次的k,交换的总值为v+k*ans,v是前面超了的值之和#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#inc 阅读全文
摘要:
其实,这道题暴力也行,两个for就搞定了,时间复杂度为O(N^2),而树状数组的时间复杂度为O(N*logN)。树状数组求逆序对的原理:前面有i-1个数,把每次输入的数看作树状数组的下标,设置增加的变量为1,算其前缀和(有多少个1就有多少个顺序对),然后减去顺序对就是答案,方案有两种(本质是一样的):1、ans+=(i-1-sum(a));add(a);2、 add(a); ans+=(i-sum(a));#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#incl 阅读全文