当前位置: 首页 > news >正文

M. Minimal and Maximal XOR Sum 2023“钉耙编程”中国大学生算法设计超级联赛(7)hdu7359

Problem - 7359

题目大意:给出一个n个数的排列,可以将任意区间内的所有数头尾翻转,每次操作的费用等于区间长度,要求将其变成一个递增排列,求消耗费用的异或和的最小值和最大值

1<=n<=1e5

思路:操作的最小费用就是翻转相邻两个数,费用为2,而这样翻转的最小操作次数就是排列的逆序对数量,而这样任意操作的操作数的奇偶性也与逆序对的数量的奇偶性相同,所以最小的异或和要么是0要么是2,与逆序对的数量的奇偶性有关。

考察如何使异或和最大,异或和最大也就是在与n的二进制位数相同时,每一位都为1,这样就需要分别翻转一次肠胃所有2的幂的区间,然后我们发现翻转了一个长为x的区间后,可以用x*(x-1)/2次翻转相邻两数的操作将区间还原,因为x是2的幂所以x*(x-1)/2一定是偶数,也就是i>1是所有2的i次方且小于等于n的数都能加到答案上,然后因为区间长度可以为1,所以也可以+1,那么最大值也就是在最小值基础上将n的二进制表达的其他位都变成1

#include<__msvc_all_public_headers.hpp>
//#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
ll tree[N];
int n;
ll a[N];
ll lowbit(ll x)
{return x & -x;
}
void add(ll x)
{//树状数组的建立while (x <= n){tree[x]++;x += lowbit(x);}
}
ll summ(ll x)
{//树状数组求前缀和ll ans = 0;while (x){ans += tree[x];x -= lowbit(x);}return ans;
}
void solve()
{cin >> n;for (int i = 1; i <= n; i++){//初始化树状数组tree[i] = 0;}ll inv = 0;for (ll i = 1; i <= n; i++){cin >> a[i];add(a[i]);inv += i - summ(a[i]);}int ans1 = inv & 1 ? 2 : 0;ll ans2 = log2l(n);if (1 << ans2 != log2l(n)){ans2++;}ans2 = (1 << ans2) - 1;//将n的二进制表达都填满1ans2 += !ans1 && n > 1 ? -2 : 0;//如果n!=1且an1等于0就要把2减掉cout << ans1 << " " << ans2 << endl;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t;cin >> t;while (t--){solve();}
}

http://www.lryc.cn/news/115828.html

相关文章:

  • C++基础篇(五)内存模型及详细示例
  • 基于 JMeter API 开发性能测试平台
  • HBase-写流程
  • [mongo]应用场景及选型
  • linux c語言之crc16错误检测的使用
  • 搭建本地开发服务器
  • linux脚本
  • 企升编辑器word编写插件
  • 怎么在JMeter中的实现关联
  • 算法通关村第六关——如何使用中序和后序来恢复一颗二叉树
  • leetcode算法题--判断是否能拆分数组
  • 基于Flask的模型部署
  • 【资料分享】全志科技T507-H开发板规格书
  • 2023华数杯数学建模C题思路 - 母亲身心健康对婴儿成长的影响
  • 【Kaggle】Identify Contrails to Reduce Global Warming 比赛数据集的可视化(含源代码)
  • Spring(12) BeanFactory 和 ApplicationContext 区别
  • git的日常使用
  • 【Spring Boot】请求参数传json对象,后端采用(pojo)CRUD案例(102)
  • layui之layer弹出层的icon数字及效果展示
  • Python selenium对应的浏览器chromedriver版本不一致
  • Redis的安装方法与基本操作
  • 选读SQL经典实例笔记20_Oracle语法示例
  • JAVA细节/小技巧
  • jmeter如何压测和存储
  • 一个月学通Python(三十三):Python并发编程在爬虫中的应用
  • HCIP——STP
  • 【数据结构】“单链表”的练习题
  • 项目实战 — 消息队列(5){统一硬盘操作}
  • 【2.2】Java微服务:Hystrix的详解与使用
  • 【PYTHON】WebSocket服务端与客户端通信实现