BZOJ3289[JZYZOJP2018]: Mato的文件管理 莫队+树状数组+离散化
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
离散化可以看我上一篇写的那个离散化blahblah什么的.......算是莫队板子
和离散化板子和树状数组板子放到一起的板子题....
树状数组求逆序对即可
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,q;
int a[]={};//原本的文件
int b[]={};//离散化媒介
int bel[]={};//询问块
int tr[]={};//树状数组
int ans[]={};
struct nod{
int x,y;
int id;
}e[];
int sz;
bool mmp(nod aa,nod bb){
if(bel[aa.x]==bel[bb.x]){
if(aa.y==bb.y){
return aa.x<bb.x;
}
return aa.y<bb.y;
}
return bel[aa.x]<bel[bb.x];
}
inline int lowbit(int x){
return x&-x;
}
inline int sum(int x){
int ret = ;
while(x>){
ret+=tr[x];
x-=lowbit(x);
}
return ret;
}
inline void add(int x,int v){
while(x<=){
tr[x]+=v;
x+=lowbit(x);
}
}
void work(){
int l=,r=;
int an=;
for(int i=;i<=q;i++){
while(l>e[i].x){
l--;
an+=sum(a[l]-);
add(a[l],);
}
while(r<e[i].y){
r++;
an+=sum()-sum(a[r]);
add(a[r],);
}
while(l<e[i].x){
add(a[l],-);
an-=sum(a[l]-);
l++;
}
while(r>e[i].y){
add(a[r],-);
an-=sum()-sum(a[r]);
r--;
}
ans[e[i].id]=an;
}
for(int i=;i<=q;i++){
printf("%d\n",ans[i]);
}
}
int main(){
//freopen("wtf.in","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b+,b+n+);
int size=unique(b+,b+n+)-b-;
for(int i=;i<=n;i++){
a[i]=lower_bound(b+,b+size+,a[i])-b;
}
scanf("%d",&q);
sz=(int)sqrt((double)q);
for(int i=;i<=q;i++){
bel[i]=(i-)/sz+;
}
for(int i=;i<=q;i++){
scanf("%d%d",&e[i].x,&e[i].y);
e[i].id=i;
}
sort(e+,e++q,mmp);
work();
return ;
}
BZOJ3289[JZYZOJP2018]: Mato的文件管理 莫队+树状数组+离散化的更多相关文章
- 【BZOJ3289】Mato的文件管理 莫队+树状数组
题目大意:给定一个长度为 N 的序列,M 个询问,每次询问区间逆序对的个数. 题解:用树状数组加速答案转移. 代码如下 #include <bits/stdc++.h> #define f ...
- bzoj 3289: Mato的文件管理 莫队+树状数组
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...
- bzoj3289 Mato的文件管理 莫队+树状数组
求逆序对个数,莫队套树状数组 #include<cstdio> #include<iostream> #include<cstring> #include<c ...
- Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1539 Solved: 665[Submit][Status][Di ...
- bzoj 3289 : Mato的文件管理 (莫队+树状数组)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3289 思路: 求区间最小交换的次数将区间变成一个不降序列其实就是求区间逆序对的数量,这 ...
- BZOJ_3289_Mato的文件管理_莫队+树状数组
BZOJ_3289_Mato的文件管理_莫队+树状数组 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号 .为了防止他人 ...
- bzoj3236 作业 莫队+树状数组
莫队+树状数组 #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...
- BZOJ3236[Ahoi2013]作业——莫队+树状数组/莫队+分块
题目描述 输入 输出 样例输入 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 样例输出 2 2 1 1 3 2 2 1 提示 N=100000,M=1000000 ...
- COGS.1822.[AHOI2013]作业(莫队 树状数组/分块)
题目链接: COGS.BZOJ3236 Upd: 树状数组实现的是单点加 区间求和,采用值域分块可以\(O(1)\)修改\(O(sqrt(n))\)查询.同BZOJ3809. 莫队为\(O(n^{1. ...
随机推荐
- 下载Google My Tracks
http://code.google.com/p/mytracks/source/browse/?name=2.0.2#hg%2FMyTracks%253Fstate%253Dclosed 需要类似的 ...
- Master of Phi (欧拉函数 + 积性函数的性质 + 狄利克雷卷积)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6265 题目大意:首先T是测试组数,n代表当前这个数的因子的种类,然后接下来的p和q,代表当前这个数的因 ...
- 【C++自我精讲】基础系列六 PIMPL模式
[C++自我精讲]基础系列六 PIMPL模式 0 前言 很实用的一种基础模式. 1 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implemen ...
- 美团实习Java岗面经,已拿offer
作者:icysnowgx 链接:https://www.nowcoder.com/discuss/71954?type=2&order=3&pos=10&page=1 来源:牛 ...
- MySQL常见错误代码说明
附:MySQL常见错误代码说明 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据 ...
- redis+cookie+json+filter实现单点登录
目录: 1.项目集成redis客户端jedis 引入Jedis pom 2.redis连接池构建及调试 1)JedisPoolConfig源码解析 2)JedisPool源码解析 3)JedisPoo ...
- 2017 CERC
2017 CERC Problem A:Assignment Algorithm 题目描述:按照规则安排在飞机上的座位. solution 模拟. 时间复杂度:\(O(nm)\) Problem B: ...
- [ python ] FTP作业进阶
作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...
- [tensorflow]的安装
1 pip install 最简单直接的方法,通过pip install安装,命令如下: pip install tensorflow-gpu //安装gpu版tensorflow pip insta ...
- git rebase 过程中遇到冲突该怎么解决?
在执行git rebase 过程中经常遇到问题,此时有点慌,一般如何解决呢? 1.先将本地的冲突手动解决 2.执行下面命令 git add . git rebase --contine //继续re ...