bzoj3295: [Cqoi2011]动态逆序对 三维数点
为了便于考虑,把删除反序变为增加
于是就变成关于权值和位置和时间的三维数点
一波cdq一波树状数组教做人
(神TM需要longlong,80了一发)
#include <bits/stdc++.h>
#define mid (l+r>>1)
#define ll long long
using namespace std;
ll n,ret,m,tem;
ll tr[],a[],in[];
bool ok[];
struct qu
{
ll num,pos,id,ans;
} q[],t[];
bool com(qu a,qu b)
{
return a.id<b.id;
}
void add(ll x,ll y){ for(;x<=n;x+=x&-x) tr[x]+=y;}
ll que(ll x){ for(ret=;x;x-=x&-x) ret+=tr[x];return ret;}
void cdq(ll l,ll r)
{
if(l==r) return;
cdq(l,mid);cdq(mid+,r);
for(ll i=l,j=l,k=mid+;i<=r;i++)
if((k>r) || (j<=mid && q[j].pos<q[k].pos)) t[i]=q[j++];
else t[i]=q[k++];
ll ALL=;
for(ll i=l;i<=r;i++)
if((q[i]=t[i]).id>mid)
q[i].ans+=ALL-que(q[i].num);
else
add(q[i].num,),++ALL;
for(ll i=l;i<=r;i++)
if(q[i].id<=mid)
add(q[i].num,-);
for(ll i=r;i>=l;i--)
if(q[i].id>mid)
q[i].ans+=que(q[i].num);
else
add(q[i].num,);
for(ll i=l;i<=r;i++)
if(q[i].id<=mid)
add(q[i].num,-);
}
int main()
{
scanf("%d%d",&n,&m);
for(ll i=;i<=n;i++)
scanf("%d",&tem),a[tem]=i;
for(ll i=;i<=m;i++)
scanf("%d",&in[i]),ok[in[i]]=;
tem=;
for(ll i=;i<=n;i++)
if(!ok[i])
q[++tem].num=i,q[tem].pos=a[q[tem].num],q[tem].id=tem;
for(ll i=m;tem<=n;i--)
q[++tem].num=in[i],q[tem].pos=a[q[tem].num],q[tem].id=tem;
cdq(,n);
sort(q+,q+n+,com);
for(ll i=;i<=n;i++)
q[i].ans+=q[i-].ans;
for(ll i=n;i>n-m;i--)
printf("%lld\n",q[i].ans);
return ;
}
bzoj3295: [Cqoi2011]动态逆序对 三维数点的更多相关文章
- bzoj3295 [Cqoi2011]动态逆序对 cdq+树状数组
[bzoj3295][Cqoi2011]动态逆序对 2014年6月17日4,7954 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数. ...
- [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...
- bzoj千题计划146:bzoj3295: [Cqoi2011]动态逆序对
http://www.lydsy.com/JudgeOnline/problem.php?id=3295 正着删除看做倒着添加 对答案有贡献的数对满足以下3个条件: 出现时间:i<=j 权值大小 ...
- BZOJ3295 [Cqoi2011]动态逆序对 —— CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3295 3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 1 ...
- bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)
3295: [Cqoi2011]动态逆序对 题目:传送门 题解: 刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波 还是太弱了...想到了要做两次cdq...然后伏地 ...
- bzoj3295[Cqoi2011]动态逆序对 树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5987 Solved: 2080[Submit][Sta ...
- 2018.07.01 BZOJ3295: [Cqoi2011]动态逆序对(带修主席树)
3295: [Cqoi2011]动态逆序对 **Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j& ...
- BZOJ3295: [Cqoi2011]动态逆序对(树状数组套主席树)
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 7465 Solved: 2662[Submit][Sta ...
- [bzoj3295][Cqoi2011]动态逆序对_主席树
动态逆序对 bzoj-3295 Cqoi-2011 题目大意:题目链接. 注释:略. 想法:直接建立主席树. 由于是一个一个删除,所以我们先拿建立好的root[n]的权值线段树先把总逆序对求出来,接着 ...
随机推荐
- window/body/img/iframe 的onload事件
在html页面中,只有body,img,iframe这一类标签具有onload事件. onload事件表示在当前元素载入完成后发生的事件.其中,window也有onload事件,但是跟body的是同一 ...
- linux 多线程编程-读写者问题
#include <cstdio> #include <pthread.h> #include <unistd.h> ]; int i,j; pthread_rwl ...
- codevs 4939 欧拉函数
传送门 4939 欧拉函数 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamon 题目描述 Description 输入一个数n,输出小于n且与n互素的整数个 ...
- finetune
微调的具体方法和技巧有很多种,这里总结了在不同场景下的微调技巧: 1)新数据集比较小且和原数据集相似.因为新数据集比较小(比如<5000),如果fine-tune可能会过拟合:又因为新旧数据集类 ...
- ScikitLearn 学习器类型
源自在线课程的学习:http://www.studyai.com/course/detail/d086826e9be84b818f9c54893633663d
- WPF ListView VisualPanel
<ItemsPanelTemplate x:Key="ItemsPanelTemplate1"> &l ...
- C# 使用 MemoryStream 将数据写入内存
转自:http://blog.csdn.net/andrew_wx/article/details/6629951 常用的MemoryStream构造函数有以下3种. 1:MemoryStream() ...
- caffe template
http://www.cnblogs.com/ggjucheng/archive/2011/12/18/2292090.html
- Hibernate 的HQL和sql有什么区别
转自:https://blog.csdn.net/haozhugogo/article/details/54575802sql 面向数据库表查询 hql 面向对象查询 hql : from 后面跟的 ...
- 关于java中equals与==的区别的小实验
java中equals与==经常容易混淆,简单一点说就是equals比较的是值是否相等,是一种方法,==比较的两个对象在JVM中的地址,是一种操作符. 做了几个小实验比较结果. 实验一: String ...