这个用莫队做会被卡,但是我还是......

收获在于树状数组维护后缀和以及双维排序......

莫队的时间复杂度比想象中的要好一些....

然而我还是被卡了......

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define MAXN 100005
using namespace std;
int pos[MAXN],len,a[MAXN],front[MAXN],back[MAXN],n,m,t[MAXN],p,now,b[MAXN],live[MAXN];
struct Q
{
int pos,time,ans;
}q[MAXN];
int comp(const Q x,const Q y)
{
return pos[x.pos]<pos[y.pos]||(pos[x.pos]==pos[y.pos]&&x.time<y.time);
}
int end_comp(const Q x,const Q y)
{
return x.time<y.time;
}
inline int lowbit(int x)
{
return x&(-x);
}
inline void update_front(int x,int i)
{
if(x==)return;
while(x>)
{
front[x]+=i;
x-=lowbit(x);
}
}
inline void update_back(int x,int i)
{
if(x==)return;
while(x<=n)
{
back[x]+=i;
x+=lowbit(x);
}
}
inline int sum_front(int x)
{
int ret=;
while(x<=n)
{
ret+=front[x];
x+=lowbit(x);
}
return ret;
}
inline int sum_back(int x)
{
int ret=;
while(x>)
{
ret+=back[x];
x-=lowbit(x);
}
return ret;
}
long long ans;
void pre()
{
scanf("%d%d",&n,&m);
len=(int)(sqrt(n+0.5));
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
live[a[i]]=i;
pos[i]=(i-)/len+;
}
for(int i=n;i>;i--)
{
ans+=sum_back(a[i]-);
update_back(a[i],);
}
update_back(a[],-);
p=;
now=;
for(int i=;i<=m;i++)
{
scanf("%d",&b[i]);
q[i].pos=live[b[i]];
q[i].time=i;
}
sort(q+,q+m+,comp);
}
inline void via(int pl,int i)
{
a[live[pl]]=(i==)?pl:;
if(live[pl]<p)update_front(pl,i);
if(live[pl]>p)update_back(pl,i);
}
inline void do_front(int pl)
{
update_front(a[pl],);
update_back(a[pl+],-);
}
inline void do_back(int pl)
{
update_back(a[pl],);
update_front(a[pl-],-);
}
void work()
{
for(int i=;i<=m;i++)
{
while(now<q[i].time)via(b[now++],-);
while(now>q[i].time)via(b[--now],);
while(p<q[i].pos)do_front(p++);
while(p>q[i].pos)do_back(p--);
q[i].ans=sum_front(a[q[i].pos]+)+sum_back(a[q[i].pos]-);
}
}
void print()
{
sort(q+,q+m+,end_comp);
for(int i=;i<=m;i++)
{
printf("%lld\n",ans);
ans-=q[i].ans;
}
}
int main()
{
//freopen("inverse.in","r",stdin);
//freopen("inverse.out","w",stdout);
pre();
work();
print();
return ;
}

BZOJ3295: [Cqoi2011]动态逆序对 莫队的更多相关文章

  1. bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组

    [bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...

  2. bzoj3295[Cqoi2011]动态逆序对 树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5987  Solved: 2080[Submit][Sta ...

  3. 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)

    3295: [Cqoi2011]动态逆序对 **Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j& ...

  4. [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...

  5. bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对

    http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...

  6. BZOJ3295: [Cqoi2011]动态逆序对(树状数组套主席树)

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7465  Solved: 2662[Submit][Sta ...

  7. BZOJ3295 [Cqoi2011]动态逆序对 —— CDQ分治

    题目链接:https://vjudge.net/problem/HYSBZ-3295 3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 1 ...

  8. bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)

    3295: [Cqoi2011]动态逆序对 题目:传送门 题解: 刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波 还是太弱了...想到了要做两次cdq...然后伏地 ...

  9. [bzoj3295][Cqoi2011]动态逆序对_主席树

    动态逆序对 bzoj-3295 Cqoi-2011 题目大意:题目链接. 注释:略. 想法:直接建立主席树. 由于是一个一个删除,所以我们先拿建立好的root[n]的权值线段树先把总逆序对求出来,接着 ...

随机推荐

  1. MAC和windows开发操作系统环境,解决Maven工程中报 Missing artifact jdk.tools:jdk.tools

    同事使用的是苹果mac,而我们其他人的开发环境是windows jdk1.8 导致同事从git上pull下来的工程,pom文件是直接报错的, windows下的pom文件设置是这样的: <dep ...

  2. Spark-源码-Spark-Submit 任务提交

    Spark 版本:1.3 调用shell, spark-submit.sh args[] 首先是进入 org.apache.spark.deploy.SparkSubmit 类中调用他的 main() ...

  3. python 装饰器 生成及原里

    # 装饰器形成的过程 : 最简单的装饰器 有返回值的 有一个参数 万能参数 # 装饰器的作用 # 原则 :开放封闭原则 # 语法糖 :@ # 装饰器的固定模式 #不懂技术 import time # ...

  4. requests模块基础

    requests模块 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bor ...

  5. DDR分析与布线要求

    基本知识 Double Data Rate Synchronous Dynamic Random Access Memory 简称 DDR SDRAM 双倍数据率同步动态随机存取内存 DDR SDRA ...

  6. C++11中initializer lists的使用

    Before C++11,there was no easy way to do things like initialize a std::vector or std::map(or a custo ...

  7. 复制MySQL数据库A到另外一个MySQL数据库B(仅仅针对innodb数据库引擎)

    方案一:(不用太大的变化my.ini文件) copy 原数据库A中的   数据库(database)  ib_logfile1  ib_logfile0   ibdata1: 关闭目的数据库B: 备份 ...

  8. Memcached Hash算法

    本文来自网易云社区 作者:吕宗胜 Hash算法 1. Memcached Hash介绍 我们在前面的文章中已经介绍过了Memcached的内存管理方式,LRU的策略.由于Memcached的数据存储方 ...

  9. BeyondCompare3 提示许可证密钥已被撤销解决方法

    今天对比文件提示 许可证密钥已被撤销:3281-0350! 找过了几个注册码还是不行. 正确简单的解决方法: 1.找到 BCState.xml 文件 ​ 2.编辑器打开,删除<TCheckFor ...

  10. 【紫书】(UVa12563)Jin Ge Jin Qu hao

    继续战dp.不提. 题意分析 这题说白了就是一条01背包问题,因为对于给定的秒数你只要-1s(emmmmm)然后就能当01背包做了——那1s送给劲歌金曲(?).比较好玩的是这里面dp状态的保存——因为 ...