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]的权值线段树先把总逆序对求出来,接着 ...
随机推荐
- 苹果AppStore如何申请加急审核
登录iTunesconnect,点击右上角的“?”图标,选择“联系我们”. iTunes Connect首页 依次选择“App Review”.“App Store Review” .” Reques ...
- Linux_异常_03_Failed to restart iptables.service: Unit not found.
启动防火墙时出现: Failed to restart iptables.service: Unit not found. 解决方案: 1.https://stackoverflow.com/ques ...
- Java中内部类中使用外面变量为什么final修饰?
所以final从语法上约束了实际上两个不同变量的一致性(表现为同一变量). 我的理解: 例如这样的代码: public void test(String str){ str="abc&quo ...
- 【译】在ES6中如何优雅的使用Arguments和Parameters
原文地址:how-to-use-arguments-and-parameters-in-ecmascript-6 ES6是最新版本的ECMAScript标准,而且显著的改善了JS里的参数处理.我们现在 ...
- codeforces 659G G. Fence Divercity(dp)
题目链接: G. Fence Divercity time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- CentOS 性能监控之nmon
工具集: Nmon 性能数据收集分析工具Nmon analyser 性能数据分析工具,excel文件nmon_x86_sles10 Nmon在x86_sles10下二进制执行文件 nmon概述 n ...
- 损失函数(Loss function) 和 代价函数(Cost function)
1损失函数和代价函数的区别: 损失函数(Loss function):指单个训练样本进行预测的结果与实际结果的误差. 代价函数(Cost function):整个训练集,所有样本误差总和(所有损失函数 ...
- P2060 [HNOI2006]马步距离
P2060 [HNOI2006]马步距离 数据到百万级别,明显爆搜不行,剪枝也没法剪.先打表.发现小数据内步数比较受位置关系影响,但数据一大就不影响了.大概搜了一个20*20的表把赋值语句打出来.判断 ...
- WC2017 冬眠记
2017年2月3日,为期7天的冬眠营冬令营正式开幕. 前4天我们见到了各种集训队dalao们的华丽身姿 感受到了听课听不懂睡觉又惭愧的无力感 见到了几百号人近一半玩手机,剩下的一半有一半在睡觉,再剩下 ...
- javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转换为YUV、BGR24或RGB24等图像像素数据
javacpp-ffmpeg系列: javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片 javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转 ...