摘要: 思路:我们只需坚守一个原则,本来就在左边的坚决不把它换到右边。也就是相邻的两个数,左边小,右边大,那么就不调换。这样对每个数,只要统计左边比它大的数的个数。可以从后面开始用树状数组统计比它小的数的个数是一样的。#include#include#include#include#define Maxn 1000010#define lowbit(x) (x&(-x))using namespace std;int C[Maxn],num[Maxn],n,r[Maxn];void init(){ memset(C,0,sizeof(C));}int cmp(int a,int b){ r.. 阅读全文
posted @ 2013-07-30 20:52 fangguo 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 思路:从后面往前面统计,每次先sum+=Sum(num[i]+1),然后在update(num[i]+1,1)。这样每次Sum每次加的个数就是num[i]的逆序对个数。每次从队首调一个元素到队尾,逆序对的变化为sum=sum-num[i]+n-num[i]+1。减少的个数为num[i],增加的个数为n-num[i]-1。#include#include#include#include#define Maxn 5010#define lowbit(x) (x&(-x))using namespace std;int C[Maxn],num[Maxn],n;void init(){ mem 阅读全文
posted @ 2013-07-30 20:02 fangguo 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 这题对于O(n^2)的算法有很多,我这随便贴一个烂的,跑了375ms。#include#includeusing namespace std;int mat[8008];int main(){ int i,j,t,n; scanf("%d",&n); mat[0]=1; for(i=1;i=mat[i]) { mat[j]++;} } for(i=0;i#include#include#include#include#define Maxn 8010#define inf 0x7... 阅读全文
posted @ 2013-07-30 15:46 fangguo 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 思路:先有每个儿子向所有他喜欢的姑娘建边,对于最后给出的正确匹配,我们建由姑娘到相应王子的边。和某个王子在同一强连通分量,且王子喜欢的姑娘都是该王子能娶得。思想类似匈牙利算法求匹配的时候,总能找到增广路径。代码比较烂,跑了近6s。#include#include#include#include#include#include#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a) q[Maxn];void init(){ memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); ... 阅读全文
posted @ 2013-07-30 15:34 fangguo 阅读(159) 评论(0) 推荐(0) 编辑