【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3289

【题目大意】

  求静态区间逆序对。

【题解】

  我们对查询进行莫队操作,对于区间的删改我们可以计算出改变量对于逆序对的贡献,
  利用树状数组维护即可。

【代码】

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
const int N=50100;
using namespace std;
typedef long long LL;
int pos[N],a[N],disc[N],n,m,limit,i,l,r,c[N];
struct Q{
int l,r,id; LL ans;
friend bool operator < (const Q &a,const Q &b){
return pos[a.l]<pos[b.l]||(pos[a.l]==pos[b.l]&&a.r<b.r);
}
}ask[N];
bool cmp(const Q &a,const Q &b){return a.id<b.id;}
void read(int&a){
char ch;while(!((ch=getchar())>='0')&&(ch<='9'));
a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';
}
void update(int x,int val){while(x<=n)c[x]+=val,x+=x&-x;}
LL query(int x){LL res=0;while(x)res+=c[x],x-=x&-x;return res;}
int main(){
read(n);
limit=(int)sqrt(n+0.5);
for(i=1;i<=n;i++){read(a[i]);pos[i]=(i-1)/limit+1;}
for(int i=1;i<=n;i++)disc[i]=a[i];
sort(disc+1,disc+n+1);
for(int i=1;i<=n;i++)a[i]=lower_bound(disc+1,disc+n+1,a[i])-disc;
read(m); memset(c,0,sizeof(c));
for(int i=1;i<=m;i++){read(ask[i].l);read(ask[i].r);ask[i].id=i;}
sort(ask+1,ask+m+1); LL ans=0;
for(int i=1,l=1,r=0;i<=m;i++){
while(r<ask[i].r)r++,update(a[r],1),ans+=r-l+1-query(a[r]);
while(r>ask[i].r)update(a[r],-1),ans-=r-l-query(a[r]),r--;
while(l<ask[i].l)update(a[l],-1),ans-=query(a[l]-1),l++;
while(l>ask[i].l)l--,update(a[l],1),ans+=query(a[l]-1);
ask[i].ans=ans;
}sort(ask+1,ask+m+1,cmp);
for(int i=1;i<=m;i++)printf("%lld\n",ask[i].ans);
return 0;
}

BZOJ 3289 Mato的文件管理(莫队+树状数组)的更多相关文章

  1. bzoj 3289: Mato的文件管理 莫队+树状数组

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...

  2. Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 1539  Solved: 665[Submit][Status][Di ...

  3. bzoj 3289 : Mato的文件管理 (莫队+树状数组)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3289 思路: 求区间最小交换的次数将区间变成一个不降序列其实就是求区间逆序对的数量,这 ...

  4. BZOJ3289[JZYZOJP2018]: Mato的文件管理 莫队+树状数组+离散化

            描述 Description     Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的, ...

  5. bzoj3289 Mato的文件管理 莫队+树状数组

    求逆序对个数,莫队套树状数组 #include<cstdio> #include<iostream> #include<cstring> #include<c ...

  6. 【BZOJ3289】Mato的文件管理 莫队+树状数组

    题目大意:给定一个长度为 N 的序列,M 个询问,每次询问区间逆序对的个数. 题解:用树状数组加速答案转移. 代码如下 #include <bits/stdc++.h> #define f ...

  7. BZOJ 3289: Mato的文件管理[莫队算法 树状数组]

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Di ...

  8. BZOJ 3289: Mato的文件管理 莫队+BIT

    3289: Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的 ...

  9. BZOJ 3236 AHOI 2013 作业 莫队+树状数组

    BZOJ 3236 AHOI 2013 作业 内存限制:512 MiB 时间限制:10000 ms 标准输入输出     题目类型:传统 评测方式:文本比较 题目大意: 此时己是凌晨两点,刚刚做了Co ...

  10. bzoj 3289: Mato的文件管理 莫队+线段树

    题目链接 给一些询问,每个询问给出区间[L, R] , 求这段区间的逆序数. 先分块排序, 然后对于每次更改, 如果是更改L, 那么应该查询区间内比他小的数的个数, 如果更改R, 查区间内比他大的数的 ...

随机推荐

  1. SQL Server Delete Duplicate Rows

    There can be two types of duplication of rows in a table 1. Entire row getting duplicated because th ...

  2. 【CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制

    第2课  CC2530的通用I/O端口输入和输出控制 小蜜蜂科教 / 广东职业技术学院  欧浩源 [通用I/O端口视频教程:https://v.qq.com/x/page/x0793aol7us.ht ...

  3. canvas利用formdata上传到服务器

    1.首先绘制canvas图片 <canvas id="myCanvas" width="100" height="100" style ...

  4. Tomcat的安装以及基本配置

    Tomcat是目前最常见也是最流行的基于java的一个web服务器软件   Tomcat的安装   (1)首先需要java环境,也就是说要依赖于java虚拟机JVM   (2)下载Tomcat ,地址 ...

  5. hdu 1241Oil Deposits(BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Othe ...

  6. c语言中的输入

    先打个白条有时间在写 c语言中输入一行回车之后,以空格为单位进行的分割

  7. MySQL:Can't create test file XXX.lowe-test

    问题说明 今天部署MySQL,在使用mysql_install_db,初始化数据库时报如下错误 180622 11:36:38 mysqld_safe Starting mysqld daemon w ...

  8. 從 kernel source code 查出 版本號碼

    kernel/Makefile 1 VERSION = 4 2 PATCHLEVEL = 4 3 SUBLEVEL = 21 4 EXTRAVERSION = 5 NAME = Blurry Fish ...

  9. 用tkinter实现的gui小工具

    import tkinter import requests import json from tkinter import * class FindLocation(object): def __i ...

  10. VPS性能综合测试(5):UnixBench工具介绍

    UnixBench 介绍 UnixBench 是一个类 unix (Unix, BSD, Linux 等) 系统下的性能测试工具,它是一个开源工具.可以用于测试系统主机的性能. UnixBench 进 ...