HDU 2689 Sort it
2016-08-01 14:26
369 查看
求逆序数。分治写法。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<iostream> using namespace std; typedef long long LL; const double pi=acos(-1.0),eps=1e-8; void File() { freopen("D:\\in.txt","r",stdin); freopen("D:\\out.txt","w",stdout); } inline int read() { char c = getchar(); while(!isdigit(c)) c = getchar(); int x = 0; while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); } return x; } int n,a[1010]; int get(int l,int r,vector<int> &b) { if(l==r) { b.push_back(a[l]); return 0; } int m=(l+r)/2; vector<int>L,R; int x1=get(l,m,L), x2=get(m+1,r,R); int x3=0,pl=0,pr=0; for(;;) { if(pl==L.size()&&pr==R.size()) break; if(pl<L.size()&&pr<R.size()) { if(L[pl]<R[pr]) b.push_back(L[pl++]); else b.push_back(R[pr++]), x3=x3+L.size()-pl; } else if(pl<L.size()&&pr==R.size()) b.push_back(L[pl++]); else if(pl==L.size()&&pr<R.size()) b.push_back(R[pr++]), x3=x3+L.size()-pl; } return x1+x2+x3; } int main() { while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); vector<int> f; printf("%d\n",get(1,n,f)); } return 0; }
相关文章推荐
- HDU 2689 Sort it
- HDU_2689_Sort it
- HDU2689 Sort it【树状数组】【逆序数】
- HDU 2689 Sort it(逆序对-BIT)
- hdu 2689 Sort it 一维树状数组的应用
- 【树状数组+简单题】杭电 hdu 2689 Sort it
- HDU-2689-Sort it
- hdu 2689 Sort it
- HDU 2689 Sort it 求逆序数,树状数组实现
- hdu 2689 sort it(树状数组 逆序数)
- HDU 2689 Sort it 简单树状数组入门
- HDU 2689 Sort it(树状数组)(类似逆序数,同样不需要离散化)
- HDU 2689 sort it - from lanshui_Yang
- hdu 2689 Sort it
- HDU2689 Sort it (树状数组求逆序数)
- hdu 2689 Sort it
- HDU 2689 sort it - from lanshui_Yang
- HDU 2689 Sort it
- HDU 2689 Sort it
- HDU 2689 Sort it(树状数组,逆序数)