bzoj3289
传送门: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的更多相关文章
- 【bzoj3289】 Mato的文件管理
http://www.lydsy.com/JudgeOnline/problem.php?id=3289 (题目链接) 题意 求区间逆序对 Solution 离线无修改查询,莫队转移:树状数组维护区间 ...
- BZOJ3289 Mato的文件管理(莫队+树状数组)
这个做法非常显然. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib& ...
- 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理
http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客 bzoj3289:Mato的文件管理 线段树求逆序对+莫队 ...
- 【BZOJ3289】Mato的文件管理 莫队算法+树状数组
[BZOJ3289]Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是 ...
- [bzoj3289]Mato的文件管理_莫队_树状数组
Mato的文件管理 bzoj-3289 题目大意:给定一个n个数的序列.m次询问:一段区间中的逆序对个数. 注释:$1\le n\,mle 5\cdot 10^4$. 想法: 开始想这个题的大佬们,给 ...
- [bzoj3289]Mato的文件管理
Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能 ...
- BZOJ3289 Mato的文件管理(莫队算法+树状数组)
题目是区间逆序数查询. 莫队算法..左或右区间向左或右延伸时加或减这个区间小于或大于新数的数的个数,这个个数用树状数组来统计,我用线段树超时了.询问个数和数字个数都记为n,数字范围不确定所以离散化,这 ...
- bzoj3289 Mato的文件管理 莫队+树状数组
求逆序对个数,莫队套树状数组 #include<cstdio> #include<iostream> #include<cstring> #include<c ...
- 【BZOJ3289】Mato的文件管理 莫队+树状数组
题目大意:给定一个长度为 N 的序列,M 个询问,每次询问区间逆序对的个数. 题解:用树状数组加速答案转移. 代码如下 #include <bits/stdc++.h> #define f ...
随机推荐
- Apache无法启动提示the requested operation has failed
主要参考这篇 http://apps.hi.baidu.com/share/detail/15868128 但还是遇到一些问题,记录如下: 1. 配置完成后,restart apache,出现 the ...
- hdu_2222_Keywords Search(AC自动机板子)
题目连接:hdu_2222_Keywords Search 存个自己写的AC自动机 #include<cstdio> #include<cstring> #define F(i ...
- 在java中使用dom4j包对String格式的xm数据l解析
在网上找了好久,都没搞出来,借鉴别人的代码,依葫芦画瓢,写了个自己用的解析类.注意节点属性和子节点的区别就好了,这个包的方法还挺好用的 package com.allinpay.utils; impo ...
- 关于struts2的web.xml配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...
- nano编辑器的设置
1.取消nano的默认编辑 自己的虚拟机ubuntu不知道怎么搞的,在添加定时任务的时候总是 编辑,一开始不知道,百度了以下这个是所谓的nano,在定时任务的时候总是默认出来,自己习惯了vi,nano ...
- 15个最佳jQuery的翻页书效果的例子
在这里,你会发现15的jQuery的翻页书的插件,提供了良好的页面翻转的经验,并帮助创建类似书本的效果. jQuery的增添了一道亮丽的过渡到实际的页面在一本书或杂志HTML5. 1. BookBlo ...
- spark 文件系统Alluxio(之前名为Tachyon)
http://www.alluxio.org/documentation/v1.0.0/cn/ http://www.winseliu.com/blog/2016/04/15/alluxio-quic ...
- Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)
在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException ...
- cocos2dx 3.2 的中国象棋游戏
改编来源:http://cn.cocos2d-x.org/tutorial/lists?id=103 在cocos2dx官网看到了这么个教程,是cocos2dx 2.x版本的,于是用 cocos2dx ...
- CentOS 7 x64 安装 Ceph
CentOS 7 x64 安装 Ceph 二, 实验环境 节点 IP 主机名 系统 MON 1 ...