bzoj 3289 Mato的文件管理(莫队算法+BIT)
【题目链接】
http://www.lydsy.com/JudgeOnline/problem.php?id=3289
【题意】
回答若干个询问:[l,r]区间内的逆序对个数。
【思路】
莫队算法,BIT维护插入删除。
使用BIT维护当前指针l,r内的所有的数。考虑转移部分:
l<q[i].l 删出区间中比a[l]小的数与之构成的逆序对,Q(a[l]-1)
l>q[i].l l++,添加区间中比a[l]小的数与之构成的逆序对,Q(a[l]-1)
r>q[i].r 删除区间中比a[r]大的数与之构成的逆序对,r-l+1-Q(a[r])
r<q[i].r r++,添加区间中比a[r]大的数与之构成的逆序对,r-l-Q(a[r])
相应修改BIT。
这一部分比较容易出错 =_=
【代码】
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define FOR(a,b,c) for(int a=b;a<=c;a++)
using namespace std; typedef long long ll;
const int N = 1e5+; ll read() {
char c=getchar();
ll f=,x=;
while(!isdigit(c)) {
if(c=='-') f=-; c=getchar();
}
while(isdigit(c))
x=x*+c-'',c=getchar();
return x*f;
} struct Node {
int pos,id,l,r;
bool operator < (const Node& rhs) const
{
return pos<rhs.pos||(pos==rhs.pos&&r<rhs.r);
}
} q[N]; int n,m;
int C[N],a[N],hash[N],tot;
ll ans[N]; void add(int x,int v)
{
for(;x<=tot;x+=x&-x) C[x]+=v;
}
ll query(int x)
{
ll sum=;
for(;x;x-=x&-x) sum+=(ll)C[x];
return sum;
} int main()
{
n=read();
FOR(i,,n) a[i]=read(),hash[++tot]=a[i];
sort(hash+,hash+n+);
tot=unique(hash+,hash+n+)-hash-;
FOR(i,,n) a[i]=lower_bound(hash+,hash+n+,a[i])-hash; m=read();
int B=sqrt(n);
FOR(i,,m)
{
q[i].l=read(),
q[i].r=read();
q[i].id=i;
q[i].pos=(q[i].l-)/B+;
}
sort(q+,q+m+); ll now=;
int l=,r=;
FOR(i,,m)
{
while(l<q[i].l)
now-=query(a[l]-),add(a[l],-),l++;
while(l>q[i].l)
l--,now+=query(a[l]-),add(a[l],);
while(r>q[i].r)
now-=r-l+-query(a[r]),add(a[r],-),r--;
while(r<q[i].r)
r++,now+=r-l-query(a[r]),add(a[r],);
ans[q[i].id]=now;
} FOR(i,,m)
printf("%lld\n",ans[i]);
return ;
}
bzoj 3289 Mato的文件管理(莫队算法+BIT)的更多相关文章
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- BZOJ 3289: Mato的文件管理 莫队+BIT
3289: Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的 ...
- Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1539 Solved: 665[Submit][Status][Di ...
- bzoj 3289: Mato的文件管理 莫队+树状数组
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...
- bzoj 3289 : Mato的文件管理 (莫队+树状数组)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3289 思路: 求区间最小交换的次数将区间变成一个不降序列其实就是求区间逆序对的数量,这 ...
- bzoj 3289: Mato的文件管理 莫队+线段树
题目链接 给一些询问,每个询问给出区间[L, R] , 求这段区间的逆序数. 先分块排序, 然后对于每次更改, 如果是更改L, 那么应该查询区间内比他小的数的个数, 如果更改R, 查区间内比他大的数的 ...
- 【BZOJ3289】Mato的文件管理 莫队算法+树状数组
[BZOJ3289]Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是 ...
- BZOJ 3289 Mato的文件管理(莫队+离散化求逆序数)
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 2171 Solved: 891 [Submit][Status][ ...
- BZOJ 3289: Mato的文件管理 【莫队 + 树状数组】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3289 3289: Mato的文件管理 Time Limit: 40 Sec Memory ...
随机推荐
- python多线程threading
本文通过 4个example 介绍python中多线程package —— threading的常用用法, 包括调用多线程, 同步队列类Queue, Ctrl+c结束多线程. example1. 调用 ...
- MVC列表页通过CheckBox进行批量选择删除
1.Html代码,将所有CheckBox包含于删除表单,并且所有列表项的CheckBox使用相同的Name,并且Value设置为数据项主键ID @using (Html.BeginForm(" ...
- poj1961Period(next数组)
http://poj.org/problem?id=1961 对于next数组只能说略懂,其中精髓还是未完全领会 大体是本串相同前缀与后缀的最大长度,读不懂?看串abcdab 这里所说前缀与后缀都为a ...
- android异步任务详解 AsynTask
android提供了一套专门用于异步处理的类.即:AynsTask类.使用这个类可以为耗时程序开辟一个新线程进行处理,处理完时返回. 其实,AsynTask类就是对Thread类的一个封装,并且加入了 ...
- [ionic开源项目教程] - 第6讲 过滤器filter的使用
过滤器filter的使用 1.回顾 再熟悉一下tab1.html的代码: <div class="list"> <a ng-repeat="item i ...
- Asp.Net生命周期系列四
上回我们说的当一个Http请求来到HttpModule这里的时候,Asp.Net内部并未对这个Http请求做出任何的处理,我们可以对这个Http请求添加一些我们需要的信息,以方便我们控制这个Http请 ...
- HDU 2122 HDU Today【Floyd】
题意:给出n条路,起点和终点,问最短距离 用map处理一下地名,再用floyd 可是不懂的是:为什么INF定义成0x7fffffff就输出一堆奇怪的东西,改成100000000就可以了 #includ ...
- C#随机颜色和随机字母
//随机获取颜色 public System.Drawing.Color GetRandomColor() { Random RandomNum_First = new Random(Guid.New ...
- Windows Tftpd32 DHCP服务器 使用
/********************************************************************* * Windows Tftpd32 DHCP服务器 使用 ...
- Android之Notification的多种用法(转)
我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的. 我们也 ...