摘要: 思路:1、将原序列seq[]的下标按照seq[]的值升序排序存入res[]中。2、假如我们知道res[j]的后面小于res[j]的数的个数x的话,那么res[j]需要交换的次数为j-res[j]+x;(自己推一下就知道)。3、如何求x呢?我们可以用树状数组sum[]来统计res[]从后往前处理过的数。4、求和累加j-res[j]+x;(j从n-1到0)#include<cstdio>#include<iostream>#include<algorithm>using namespace std;#define MAX 500010 int seq[MAX], 阅读全文
posted @ 2012-11-27 23:13 书山有路,学海无涯 阅读(149) 评论(0) 推荐(0) 编辑