莫队算法+树状数组+离散化。
一定要注意莫队转移时增加或减少的逆序对数,比较容易写挂。
离散化那部分虽然效率很低,但是很好写,正确性也很容易保证,虽然会拖慢程序运行速度,但编码的复杂度却大大降低了。
我觉得是一种不错的选择。//反正是抄的黄学长的。。
#include#include #include #include using namespace std;const int maxn = 50000 + 10;int pos[maxn],a[maxn],n,m,block,l,r,ans,res[maxn];int disc[maxn];struct data { int l,r,id;}q[maxn];bool cmp(data a,data b) { if(pos[a.l]==pos[b.l]) return a.r q[i].l) { l--; ans+=bit.query(a[l]); bit.add(a[l],1); } while(r>q[i].r) { bit.add(a[r],-1); ans-=r-l-bit.query(a[r]); r--; } res[q[i].id]=ans; } for(int i=1;i<=m;i++) printf("%d\n",res[i]); return 0;}