题目描述

懒得写题目背景了,就不写了。
有一个 $0, 1 \dots n − 1$ 的排列 $p_1, p_2 \dots p_n$,如果 $p_i ⊕ p_j ≤ a$(其中 $⊕$ 为按位异或),你就可以交换 $p_i$ 和 $p_j$。你希望通过若干次操作把它排序。但是,你还没有定下 a 的值,你想知道能够成功排序情况下最小的非负整数 a。
为了让题目更难,有时候会对排列进行更新,每次更新是交换某对 $p_i$ 和 $p_j$。在每次更新后你都要需要输出最小的 $a$。
 
第一行输入 $n$ 和 $m$,$m$ 是更新的个数。
接下来 $m$ 行,每行两个整数 $i, j$,表示交换 $p_i$ 和 $p_j$。
对于所有数据,$1 ≤ n, m ≤ 500000$,对于每个更新 $1 ≤ i, j ≤ n,i \neq j$。
$Subtask 1(10pts):n, m ≤ 5。$ 
$Subtask 2(20pts):n, m ≤ 300。$ 
$Subtask 3(20pts):m = 1。$ 
$Subtask 4(20pts):n, m ≤ 50000。$ 
$Subtask 5(30pts):无特殊限制。$
 

solution
考虑排序1~7 的最小代价。
是4 。因为跨过4的可以让它刚好等于4
 
可以发现 $ 2^i $ 足够覆盖 $ 2^{i+1}-1$
那么我们可以两两求出i,j交换的代价 输出所有的最大代价(也就是最高位)即可。
 #include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,p[],bin[],dy[];
int get(int v){
for(int i=;i>=;i--)if(v&(<<i))return i;
return ;
}
int main()
{
cin>>n>>m;
for(int i=;i<n;i++)scanf("%d",&p[i]),dy[p[i]]=i;
for(int i=;i<n;i++){
bin[get(i^p[i])]++;
}
for(int i=,t1,t2;i<=m;i++){ scanf("%d%d",&t1,&t2);
t1--,t2--;
bin[get(t1^p[t1])]--;
bin[get(t2^p[t2])]--;
swap(p[t1],p[t2]);
bin[get(t1^p[t1])]++;
bin[get(t2^p[t2])]++;
int fl=;
for(int j=;j>=;j--)if(bin[j]){
printf("%d\n",(<<j));fl=;
break;
}
if(!fl)puts("");
}
return ;
}
 

排序(sortb)的更多相关文章

  1. 修改后的SQL分页存储过程,利用2分法,支持排序

    /****** Object: StoredProcedure [dbo].[sys_Page_v3] Script Date: 08/13/2014 09:32:28 ******/ SET ANS ...

  2. sql分页带参数,带排序等,动态实现的方法

    USE [YQOBS] GO /****** Object: StoredProcedure [dbo].[PageList] Script Date: 11/06/2014 11:39:35 *** ...

  3. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  4. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  5. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  6. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  7. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  8. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  9. 使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中

    #coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...

随机推荐

  1. 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...

  2. centos7编译安装lamp实现wordpress

    准备安装包,并解压 mariadb-10.3.13.tar.gz  ,php-7.3.2.tar.bz2  ,httpd-2.4.38.tar.bz2  php-7.3.2 ,  phpMyAdmin ...

  3. gd库 给底图写入文字问题

    png-8的图片 设置颜色会返回false,换成png-24的就可以了

  4. WIN10下解决Failed installing tomcat X service

    Win10下无法安装Tomcat的service.bat 来看本文的网友想必已经在自己电脑的cmd看了几百遍的Failed installing tomcat X service 字样,也认真检查过自 ...

  5. 继续分享shell 之变量使用

    变量类型 运行shell时,会同时存在三种变量: 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 2) 环境变量 所有的程序,包括 ...

  6. docker简介以及优缺点

    1.docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制, ...

  7. MUI常用脚本及原生JavaScript常用操作元素方法

    1.mui元素转换html元素 var obj=mui("#id")[0]; 2.事件绑定 var btn = document.getElementById("logi ...

  8. PHP处理mysql事务

    MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollback 事务回滚commit 事务确认2.直接用set来改变mysql的自动 ...

  9. Python学习之函数参数

    上一节,我们学习了Python中是如何定义和调用函数且如何得到返回值的.在调用函数时,有的函数需要参数来启动函数,有的则无需参数.这一节我们来介绍Python中有哪些参数类型. 位置参数 在调用函数时 ...

  10. 匿名函数lambda python

    lambda 的主体是一个表达式,不是一个代码块lambda 只有一行,仅仅能在lambda表达式种封装有限的逻辑进去匿名函数:需要一个函数,而又不想动脑筋去想名字 #普通函数的定义 def f(a, ...