传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3289

题目大意:Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号。为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问。Mato每天随机选                一个区间[l,r],他今天就看编号在此区间内的这些资料。Mato有一个习惯,他总是从文件大小从小到大看资料。他先把要看的文件按编号顺序依次拷贝出来,再用他写的排序程序给文件大小排序。排序程序可以在1单                位时间内交换2个相邻的文件(因为加密需要,不能随机访问)。Mato想要使文件交换次数最小,你能告诉他每天需要交换多少次吗?

题解:莫队+树状数组+逆序对

代码:

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define maxn 100000
using namespace std;
int n,m;
int pos[maxn],val[maxn],c[maxn],bo[maxn],ans[maxn*];
struct data{
int l,r,a,b,id;
}a[maxn*];
int read()
{
int x=; char ch; bool bo=;
while (ch=getchar(),ch<''||ch>'') if (ch=='-') bo=;
while (x=x*+ch-'',ch=getchar(),ch>=''&&ch<='') ;
if (bo) return -x; return x;
}
int lowbit(int x){ return x&-x;
}
void add(int x,int v)
{
for (int i=x; i<=n; i+=lowbit(i)) c[i]+=v;
}
int query(int x)
{
int res=;
for (int i=x; i; i-=lowbit(i)) res+=c[i];
return res;
}
bool cmp(data a,data b)
{
if (pos[a.l]==pos[b.l])
if (pos[a.l]&) return a.r<b.r;
else return a.r>b.r;
return pos[a.l]<pos[b.l];
}
void init()
{
n=read(),m=read();
for (int i=; i<=n; i++) val[i]=read();
for (int i=; i<=m; i++)
{
a[i].l=read(),a[i].r=read(),a[i].a=read(),a[i].b=read(); a[i].id=i;
}
int kk=int (sqrt(n));
for (int i=; i<=n; i++) pos[i]=(i-)/kk+;
sort(a+,a++m,cmp);
}
void updata(int k,int vval)
{
if (vval==-)
{
if (bo[val[k]]==) add(val[k],-);
bo[val[k]]--;
}
else
{
if (!bo[val[k]]) add(val[k],);
bo[val[k]]++;
}
}
void work()
{
int r=,l=;
for (int i=; i<=m; i++)
{
for (; r<a[i].r; r++) updata(r+,);
for (; r>a[i].r; r--) updata(r,-);
for (; l<a[i].l; l++) updata(l,-);
for (; l>a[i].l; l--) updata(l-,);
ans[a[i].id]=query(a[i].b)-query(a[i].a-);
}
for (int i=;i<=m; i++)
printf("%d\n",ans[i]);
}
int main()
{
init();
work();
}

  

bzoj3289的更多相关文章

  1. 【bzoj3289】 Mato的文件管理

    http://www.lydsy.com/JudgeOnline/problem.php?id=3289 (题目链接) 题意 求区间逆序对 Solution 离线无修改查询,莫队转移:树状数组维护区间 ...

  2. BZOJ3289 Mato的文件管理(莫队+树状数组)

    这个做法非常显然. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib& ...

  3. 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理

    http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客   bzoj3289:Mato的文件管理 线段树求逆序对+莫队 ...

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

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

  5. [bzoj3289]Mato的文件管理_莫队_树状数组

    Mato的文件管理 bzoj-3289 题目大意:给定一个n个数的序列.m次询问:一段区间中的逆序对个数. 注释:$1\le n\,mle 5\cdot 10^4$. 想法: 开始想这个题的大佬们,给 ...

  6. [bzoj3289]Mato的文件管理

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

  7. BZOJ3289 Mato的文件管理(莫队算法+树状数组)

    题目是区间逆序数查询. 莫队算法..左或右区间向左或右延伸时加或减这个区间小于或大于新数的数的个数,这个个数用树状数组来统计,我用线段树超时了.询问个数和数字个数都记为n,数字范围不确定所以离散化,这 ...

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

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

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

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

随机推荐

  1. TDK伪原创? 对matatags的研究总结

    /public_html/includes/modules/meta_tags.php 46行:switch ($_GET['main_page']) {这里面包括自定义页面index.php?mai ...

  2. Day05_JAVAEE系列:Junit

    Junit 单元测试开发工具:myeclipse10 内部集成的junit的库 1)什么是junit?     junit是一个专业的编写测试代码的工具 2)建立junit测试类的步骤:     2. ...

  3. Android Studio的使用(十二)怎样打包项目

    1.在导航栏的Build下面找到Generate Signed APK...,进入该菜单栏即可. 2.生成Key Store安全钥匙和证书的管理工具. 3.如果已经有了Key Store证书,则可以直 ...

  4. 转 sqlplus执行sql报错:ORA-01756:

    1.sqlplus执行sql报错:ORA-01756: quoted string not properly terminated   分类: 技术         在SQLPLUS中执行SQL文件时 ...

  5. 安卓布局修改基础常识篇之TextView属性

    [天使]安卓布局修改基础常识篇之TextView属性 在修改布局xml文件时需要熟练掌握一些属性,以下是TextView也就是文本的属性:android:autoLink 是否自动链接网址或邮箱地址: ...

  6. android开发中应该注意的问题

    1. Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效.   2. 数据库表段字段常量和SQL逻辑分离,更清 ...

  7. USACO Section 1.3 Prime Cryptarithm 解题报告

    题目 题目描述 牛式的定义,我们首先需要看下面这个算式结构: * * * x * * ------- * * * <-- partial product 1 * * * <-- parti ...

  8. HDU 5166 Missing number 简单数论

    Missing number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) [ ...

  9. git 以及 github 使用系列

    本人打算开始写一个有关git 使用,以及github 使用的系列文章了,一来可以自己总结,二来github用好了,可以存放自己的一些知识框架吧. 1.准备 : 有一个 github上的账号, wind ...

  10. ural1090 In the Army Now

    In the Army Now Time limit: 1.0 secondMemory limit: 64 MB The sergeant ordered that all the recruits ...