bzoj3289 Mato的文件管理 莫队+树状数组
求逆序对个数,莫队套树状数组
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#define N 50005
using namespace std;
int n,m,nn,a[N],c[5000005],be[N],maxn;
struct Query{
int l,r,id,ans;
}qr[N];
bool cmp1(Query a,Query b){
if(be[a.l]==be[b.l])
return a.r<b.r;
return be[a.l]<be[b.l];
}
bool cmp2(Query a,Query b){
return a.id<b.id;
}
int lowbit(int x){
return x&(-x);
}
void add(int x,int y){
while(x<=maxn)
{c[x]+=y;x+=lowbit(x);}
}
int query(int x){
int ans=0;
while(x)
{ans+=c[x];x-=lowbit(x);}
return ans;
}
void work(){
int l=1,r=0,tot=0;
for(int i=1;i<=m;i++){
while(l<qr[i].l){
tot-=query(a[l]-1);
add(a[l++],-1);
}
while(l>qr[i].l){
add(a[--l],1);
tot+=query(a[l]-1);
}
while(r<qr[i].r){
add(a[++r],1);
tot+=r-l+1-query(a[r]);
//printf("%d %d\n",query(a[r]),tot);
}
while(r>qr[i].r){
tot-=r-l+1-query(a[r]);
add(a[r--],-1);
}
qr[i].ans=tot;
}
}
int main()
{
scanf("%d",&n); nn=sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
maxn=max(maxn,a[i]);
be[i]=(i-1)/nn+1;
}
scanf("%d",&m);
int l,r;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&l,&r);
qr[i].l=l; qr[i].r=r;
qr[i].id=i;
}
sort(qr+1,qr+m+1,cmp1);
work();
sort(qr+1,qr+m+1,cmp2);
for(int i=1;i<=m;i++)
printf("%d\n",qr[i].ans);
return 0;
}
bzoj3289 Mato的文件管理 莫队+树状数组的更多相关文章
- bzoj 3289: Mato的文件管理 莫队+树状数组
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...
- BZOJ3289[JZYZOJP2018]: Mato的文件管理 莫队+树状数组+离散化
描述 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的, ...
- 【BZOJ3289】Mato的文件管理 莫队+树状数组
题目大意:给定一个长度为 N 的序列,M 个询问,每次询问区间逆序对的个数. 题解:用树状数组加速答案转移. 代码如下 #include <bits/stdc++.h> #define f ...
- 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. ...
随机推荐
- nodejs--(一)http模板篇
Nodejs http模块可以创建服务器应用实例,也能发送http请求 1.http.get(options[, callback]) 发送简单Get请求,并响应 var http=require(' ...
- canvas元素
一.canvas元素的基础知识 canvas元素是html5中新增的一个重要的元素,专门用来绘制图形.在页面上放置了一个canvas元素,就相当于在页面上放置了一块"画布",可以在 ...
- Angular v6 正式发布
Angular 6 正式发布 Angular 6 已经正式发布了!这个主要版本并不关注于底层的框架,更多地关注于工具链,以及使 Angular 在未来更容易快速推进. 作为发布的一部分,我们同步了主要 ...
- MyBatis 框架之快速入门程序
一.使用 IDEA 快速创建 Maven 项目 关于如何快速创建 Maven 项目,这个可以参考下面这篇文章: Maven 项目管理工具基础入门系列(一) 二.快速配置 MyBatis 依赖 jar ...
- C#逻辑面试题汇总【不断更新中】
(1)产生本月的月历,参考样式: 1 2 3 4 5 6 SU MO TU WE TH FR SA 01 02 03 04 05 06 07 08 09 10 11 12 13 14 ...
- 在 javascript 中,为什么 [1,2] + [3,4] 不等于 [1,2,3,4]?
在 stackoverflow 上有人提问:arrays - Why does [1,2] + [3,4] = "1,23,4" in JavaScript? 问题 我想将一个数组 ...
- Elasticsearch——起步
1.下载 地址:https://www.elastic.co/downloads/elasticsearch 2.解压 unzip elasticsearch-1.7.0.zip 3.启动 mv el ...
- 关于windows修改远程登录端口的问题
windows远程桌面默认使用的是3389,为了避免被别用用心的扫描从而暴力破解远程服务器或者vps的账户信息.可以修改默认端口3389到其它端口,如8000,10000等.最好修改为10000以后的 ...
- POP3和imap
POP3 POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,是TCP/IP协议族中的一员(默认端口是110).本协议主要用于支持使用客户端远程管理在服务器上的电子邮 ...
- Spring中IOC和AOP的理解
IOC和AOP是Spring的核心 IOC:控制反转:将创建对象以及维护对象之间的关系由代码交给了spring容器进行管理,也就是创建对象的方式反转了,交由spring容器进行管理. DI:依赖注入: ...