BZOJ 3295: [Cqoi2011]动态逆序对 cdq分治

https://www.lydsy.com/JudgeOnline/problem.php?id=3295

这个妹妹我曾见过的~~~

之前应该在校内oj写了,似乎还写过题解?发现没写博客就重新水一遍代码水一篇博客好了。

把找逆序对的过程想成一个一个往里塞数字然后找每个数字可以组成的逆序对,把最后要去掉的几个也想成往里塞,所以加一个时间维度用cdq求三维偏序。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 using namespace std;
 8 #define LL long long
 9 #define pa pair<int,int>
10 const int maxn=100010;
11 const LL minf=(LL)5e17;
12 int n,m;
13 struct nod{
14     int t,id,v;LL ans;
15 }a[maxn];
16 int b[maxn]={},vis[maxn]={};
17 LL t[maxn]={}; int sta[maxn]={},tai=0;
18 priority_queue< pa , vector< pa > , greater< pa > >q[2];
19 
20 inline void addt(int x,int v){ while(x<=n){ t[x]+=v; x+=(x&-x); } }
21 inline LL gett(int x){ LL tsn=0; while(x){ tsn+=t[x]; x-=(x&-x); } return tsn; }
22 bool mcmp1(nod aa,nod bb){
23     if(aa.id!=bb.id)return aa.id<bb.id;
24     return aa.t<bb.t;
25 }
26 bool mcmp2(nod aa,nod bb){
27     if(aa.t!=bb.t)return aa.t<bb.t;
28     return aa.id<bb.id;
29 }
30 void doit(int l,int r){
31     if(l==r)return;
32     int mid=(l+r)/2;
33     doit(l,mid); doit(mid+1,r);
34     //x被查找y查找
35     for(int i=l;i<=mid;i++)q[0].push(make_pair(a[i].t,i));
36     for(int i=mid+1;i<=r;i++)q[1].push(make_pair(a[i].t,i));
37     tai=0;
38     while(!q[1].empty()){
39         pa y=q[1].top(); q[1].pop();
40         if(q[0].empty()){a[y.second].ans+=gett(n)-gett(a[y.second].v);continue;} pa x=q[0].top();
41         while(x.first<=y.first){
42             addt(a[x.second].v,1); sta[++tai]=a[x.second].v;
43             q[0].pop(); if(q[0].empty())break; x=q[0].top();
44         }a[y.second].ans+=gett(n)-gett(a[y.second].v);
45     }
46     while(!q[0].empty())q[0].pop();
47     for(int i=1;i<=tai;i++)addt(sta[i],-1);
48     
49     for(int i=l;i<=mid;i++)q[0].push(make_pair(a[i].t,i));
50     for(int i=mid+1;i<=r;i++)q[1].push(make_pair(a[i].t,i));
51     tai=0;
52     while(!q[0].empty()){
53         pa y=q[0].top(); q[0].pop();
54         if(q[1].empty()){a[y.second].ans+=gett(a[y.second].v-1);continue;} pa x=q[1].top();
55         while(x.first<=y.first){
56             addt(a[x.second].v,1); sta[++tai]=a[x.second].v;
57             q[1].pop(); if(q[1].empty())break; x=q[1].top();
58         }a[y.second].ans+=gett(a[y.second].v-1);
59     }
60     while(!q[1].empty())q[1].pop();
61     for(int i=1;i<=tai;i++)addt(sta[i],-1);
62 }
63 int main(){
64     scanf("%d%d",&n,&m);
65     for(int i=1;i<=n;i++){scanf("%d",&a[i].v);a[i].id=i;a[i].t=i;vis[a[i].v]=i;}
66     for(int i=1;i<=m;i++){scanf("%d",&b[i]);a[vis[b[i]]].t=n+m+1-i;}
67     sort(a+1,a+1+n,mcmp1); doit(1,n);
68     sort(a+1,a+1+n,mcmp2);
69     for(int i=2;i<=n;i++)a[i].ans+=a[i-1].ans;
70     for(int i=1;i<=m;i++)printf("%lld\n",a[n-i+1].ans);
71     return 0;
72 }
View Code

 

转载于:https://www.cnblogs.com/137shoebills/p/9060496.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql连接超时timeout问题

mysql默认连接超时时间为8小时&#xff0c;需要设置长一些 第一种方式直接改my.cnfvi /etc/my.cnf[mysqld] wait_timeout31536000 interactive_timeout31536000 需要重启mysql service mysqld restart 第二种方式&#xff0c;更改变量&#xff0c;不需重启mysqlmsyql> s…

windows server 2012 R2 standard 评估版过期重启

安装的windows server 2012 standard eval评估版&#xff0c;安装完成后有10天的激活时间&#xff0c;过期后&#xff0c;每隔一个小时自动关机。 解决方法&#xff1a;将评估版转成正式版后&#xff0c;再通过KMS激活。 将评估版转成standard正式版的方法&#xff1a; &…

p1、查询端口号占用,根据端口查看进程信息/p

2017年6月份的时候&#xff0c;我就着手在公司推广git&#xff0c;首先我自己尝试搭建了GitLab来管理代码&#xff0c;并且通过以下博客记录了GitLab的搭建&#xff0c;以及GitLab备份&#xff0c;GitLab升级等事情。 git学习——>在CenterOS系统上安装GitLab并自定义域名访…

删除注册表报错“无法删除所有指定的值”

更改文件的所以者及权限。 如删除RCM 右键“权限”—》“高级”—-》更改所有者&#xff0c;权限改为完全控制即可。

Mac本如何卸载MySQL

Mac本如何卸载MySQL 在Mac上卸载MySQL上一件非常麻烦的事&#xff0c;如果没有卸载干净&#xff0c;就会无法安装新的MySQL   怎样才能完全卸载MySQL呢&#xff1f;(包括所有数据库) 执行以下操作: #打开终端窗口 #使用mysqldump备份你的数据库 #停止数据库服务器 sudo rm…

从FTP拷贝文件报错无法从指定的位置下载

报错是因为IE安全选项设置禁用了文件下载

设计模式原则之里氏替换原则

转载自&#xff1a;https://mp.weixin.qq.com/s/Uq4g53cQ7YKAXP8TuRV2Gw 定义&#xff1a; 1&#xff1a;如果对每一个类型为 T1的对象 o1&#xff0c;都有类型为 T2 的对象o2&#xff0c;使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时&#xff0c;程序 P 的行为…

PXF webapp is inaccessible but tomcat is up

生产环境新增几个节点&#xff0c;安装pxf后&#xff0c;启动时报错 stderr: Traceback (most recent call last):File "/var/lib/ambari-agent/cache/common-services/PXF/3.0.0/package/scripts/pxf.py", line 120, in <module>Pxf().execute()File "…

point-position2修改版

说明&#xff1a; 在共面直线测试中&#xff0c;由于计算误差等原因&#xff0c;共面条件判断不准&#xff0c;但计算结果依然正确。 // point-position2.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #include <stdio.h> #include <iostream&g…

Ambari安装client报错OSError:[Error 17] File exists

Ambari为集群新增扩容过程中&#xff0c;有一个节点安装多个client报错 Traceback (most recent call last):File "/var/lib/ambari-agent/cache/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/hook.py", line 37, in <module>AfterInstallHook().execute()F…

Linux学习总结(十六)系统用户及用户组管理

先来认识两个文件/etc/passwd/etc/shadow我们打印出首尾三行&#xff0c;来了解下&#xff1a;每行由&#xff1a;分割为7段&#xff0c;每段含义为&#xff1a;第一段&#xff1a;用户名&#xff0c;比如root 用户&#xff0c;普通用户test,lv,test1第二段&#xff1a;早期存放…

linux修改hostname

1、临时修改&#xff0c;重启失效 hostname yourhostname 2、永久生效 2.1 vi /etc/sysconfig/network change HOSTNAME to yourhostname2.2 vi /proc/sys/kernel/hostnamechange to your hostnam

BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】

题目链接 BZOJ2729 题解 高考数学题。。。 我们先把老师看做男生&#xff0c;女生插空站 如果两个老师相邻&#xff0c;我们把他们看做一个男生&#xff0c;女生插空站 对于\(n\)个男生\(m\)个女生的方案数&#xff1a;\[n!m!{n 1 \choose m}\] 还要特判一下没有男生女生的情况…

CentOS6离线升级CentOS7

‘利用本地centos7镜像升级centos6.7’ 需求背景&#xff1a; 服务器上安装的都是centos6.7&#xff0c;新部署的服务需要在centos7下&#xff0c;要么跑到机房重装系统&#xff0c;要么找离线解决方案&#xff0c;升级系统。 解决方案&#xff1a;之前有过离线升级小本版&a…

升级Python2.7后 no module name yum

从Python2.6.6升级到python2.7.5后导致Yum不可用。 原因是yum 命令&#xff0c;是调用的 /usr/bin/yum 脚本文件&#xff0c; 需要修改为 /usr/bin/python2.6.6 保存退出&#xff0c;成功解决。另外可能还会引起其他的问题&#xff0c;解决的思路就是根据报错的指向&#xff0…

hadoop综合大作业

Hadoop综合大作业 要求&#xff1a; 1.用Hive对爬虫大作业产生的文本文件&#xff08;或者英文词频统计下载的英文长篇小说&#xff09;词频统计。 词频统计的截图如下&#xff1a; 上次我所使用的文章是一篇中文文章&#xff0c;所以这次我用了一篇英文文档来进行分词&#xf…

Hadoop集群的kerberos认证

文章转载自http://www.cnblogs.com/easycloud/p/3724437.html 转载主要用于个人学习备查。 环境&#xff1a; OS 版本: Centos6.4 Kerberos版本: krb5-1.10.3 环境配置 机器名 Ip地址 功能 安装模块 ganglia.localdomain 192.168.124.140 Kerberos server krb5-li…

Oracle 表备份还原

方法1&#xff1a; create table mdmuser20120801 as select * from mdmuser方法2&#xff1a;create table mdmuser20120801 as select * from mdmuser where 12;insert into mdmuser20120801 select * from mdmuser ;转载于:https://www.cnblogs.com/zhchsh/p/9087331.html

HDFS文件导出本地合并为一个文件

HDFS受限于Block大小&#xff0c;大文件会分割成多个块分布在多个节点&#xff0c;导出本地的时候直接用&#xff1a; hadoop fs -get 命令会在本地创建一个目录存放多个块。 要想合并为一个大文件可以这样&#xff1a; hadoop fs -getmerge hdfs:///user/nixm/news_rank1…

MPI对道路车辆情况的Nagel-Schreckenberg 模型进行蒙特卡洛模拟

平台Ubuntu 16.04&#xff0c;Linux下MPI环境的安装见链接&#xff1a;https://blog.csdn.net/lusongno1/article/details/61709460据 Nagel-Schreckenberg 模型&#xff0c;车辆的运动满足以下规则&#xff1a;1. 假设当前速度是 v &#xff0c;和前一辆车的距离为d。2. 如…