bzoj-3289-Mato的文件管理(莫队+树状数组)
来源:互联网 发布:石油期货模拟软件 编辑:程序博客网 时间:2024/05/05 12:07
题目链接:bzoj-3289-Mato的文件管理
最大交换次数应该是区间的逆序对数,每次交换消除一个逆序对(不会证明)。
求逆序对可以用树状数组来实现。每次转移是
因此总复杂度是
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=55000;int c[maxn],d[maxn],pos[maxn];int a[maxn];int n,L,R,m;ll Ans,ans[maxn];struct Query{ int l,r,id; bool operator < (const Query & b) const { return pos[l]<pos[b.l]||(pos[l]==pos[b.l]&&r<b.r); }}Q[maxn];inline int lowbit(int x){ return x&-x;}inline void modify(int x,int k){ for(;x<maxn;x+=lowbit(x)) c[x]+=k;}inline int sum(int x){ int res=0; for(;x>0;x-=lowbit(x)) res+=c[x]; return res;}int main(){ while(~scanf("%d",&n)) { int sz=sqrt(n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); d[i]=a[i]; pos[i]=i/sz; } sort(d+1,d+n+1); for(int i=1;i<=n;i++) a[i]=lower_bound(d+1,d+n+1,a[i])-d; scanf("%d",&m); for(int i=1;i<=m;i++) { cin>>Q[i].l>>Q[i].r; Q[i].id=i; } sort(Q+1,Q+1+m); L=1;R=0;Ans=0; memset(c,0,sizeof(c)); for(int i=1;i<=m;i++) { while(R<Q[i].r) { ++R; modify(a[R],1); Ans+=R-L+1-sum(a[R]); } while(R>Q[i].r) { modify(a[R],-1); Ans-=R-L-sum(a[R]); --R; } while(L<Q[i].l) { modify(a[L],-1); Ans-=sum(a[L]); ++L; } while(L>Q[i].l) { --L; modify(a[L],1); Ans+=sum(a[L]-1); } if(Q[i].id>=maxn) while(1); ans[Q[i].id]=Ans; } for(int i=1;i<=m;i++) printf("%lld\n",ans[i]); } return 0;}
0 0
- bzoj-3289-Mato的文件管理(莫队+树状数组)
- BZOJ-3289-Mato的文件管理-莫队+树状数组
- bzoj 3289: Mato的文件管理 莫队+树状数组
- BZOJ 3289 Mato的文件管理(莫队+线段树/树状数组)
- BZOJ 3289: Mato的文件管理|分块|树状数组
- BZOJ - 3289 Mato的文件管理(莫队算法+树状数组)
- [BZOJ3289]Mato的文件管理(莫队+树状数组)
- BZOJ 3289 Mato的文件管理 莫队算法+树状数组
- BZOJ 3289 Mato的文件管理 莫队算法+树状数组
- 【BZOJ】3289: Mato的文件管理【区间逆序对,莫队套树状数组】
- [BZOJ 3289] Mato的文件管理 · 莫队算法 & 树状数组
- bzoj 3289: Mato的文件管理 (莫队算法 + 树状数组)
- BZOJ 3289 Mato的文件管理 莫队算法+树状数组
- [BZOJ]3289: Mato的文件管理 树状数组 莫队算法
- 【BZOJ 3289】Mato的文件管理 莫队
- 3289: Mato的文件管理 莫队算法+树状数组
- 【BZOJ3289】Mato的文件管理,莫队+树状数组
- 莫队+树状数组 题解【bzoj3289】Mato的文件管理
- web.config文件配置错误跳转页面
- 简单记录一下二进制枚举状态子集的技巧
- Hadoop 2.7.3安装与配置
- light oj 1191
- python 爬取12306数据
- bzoj-3289-Mato的文件管理(莫队+树状数组)
- iOS开发之微信支付
- 箭头函数
- 利用MySQL触发器实现check和assertion
- 《Linux内核修炼之道》 之 高效学习Linux驱动开发
- window下配置多个ssh密匙
- BZOJ 1010 [HNOI2008] 玩具装箱
- 反向传播算法
- http状态码含义(来源于w3school):