[BZOJ P2771] 天才ACM
[BZOJ P2771] 天才ACM
朴素算法
枚举终点 \(r\),对区间 \([l, r]\) 排序求校验值 \(sum\),比较 \(sum\) 和 \(t\)
- $ sum \le t $
r++ - $ sum > t $
l=++r,ans++
时间复杂度N2log N
初步优化
考虑校验值单调不下降,可枚举左端点l时二分右端点r,再对区间l~r求校验值,更新方法如上
时间复杂度 \(O(N\log^2N)\)
但是我们会发现这道题还是过不去,于是仔细读题,发现有一个很恶心的K组数据,那么就需要进一步卡常优化
卡常 最后优化
可以发现,当我们二分右端点r时计算校验值会重复排序已排序的部分,考虑不去重复计算
- 使用归并的思想对满足条件的部分和待排序的部分合并,常数优化
- 前一步的基础是区间长度单调不减,所以考虑使用倍增思想增加长度,定义一个变量
p,每次判断l~r+p是否满足校验值不大于T- 满足
r+=p,p<<=1; - 不满足
p>>=1 - p==0
ans++,r++,l=r,p=1;
- 满足
最后
总结一下,这道题是一道抽象的倍增和二分,思维难度较高但知识难度不是很高的好题,稍微需要一点卡常优化技巧
Code
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 5e5 + 5;
int t, n, m, ans;
LL s, sum;
LL a[N], f[N], mg[N];
inline void merge(int l, int r, int mid) {
int i = l, j = mid + 1;
for (int k = l;k <= r;k++)
if (j > r || i <= mid && f[i] <= f[j]) mg[k] = f[i++];
else mg[k] = f[j++];
}
inline bool check(int l, int r, int mid) {
for (int i = mid;i <= r;i++) f[i] = a[i];
sort(f + mid, f + r + 1);
merge(l, r, mid - 1);
sum = 0;
for (int i = 1;i <= ((r - l + 1) >> 1) && i <= m;i++) sum += (mg[r - i + 1] - mg[l + i - 1]) * (mg[r - i + 1] - mg[l + i - 1]);
if (sum <= s) {
for (int i = l;i <= r;i++) f[i] = mg[i];
return true;
}
else return false;
}
int main() {
scanf("%d", &t);
while (t--) {
ans = 0;
scanf("%d%d%lld", &n, &m, &s);
for (int i = 1;i <= n;i++) scanf("%lld", &a[i]);
int l = 1, r = 1, p = 1;
f[1] = a[1];
while (r <= n) {
if (p == 0) {
ans++, r++;
l = r, f[l] = a[l], p = 1;
}
else if (r + p <= n && check(l, r + p, r + 1)) r += p, p <<= 1;
else p >>= 1;
}
printf("%d\n", ans);
}
return 0;
}
[BZOJ P2771] 天才ACM的更多相关文章
- 天才ACM
天才ACM 给定一个整数m,定义一个集合的权值为从这个集合中任意选出m对数(不够没关系,选到尽可能选,凑不成对的舍去),每对数两个数的差的平方的和的最大值. 现在给出一个数列\(\{a_i\}\),询 ...
- AcWing:109. 天才ACM(倍增 + 归并排序)
给定一个整数 MM,对于任意一个整数集合 SS,定义“校验值”如下: 从集合 SS 中取出 MM 对数(即 2∗M2∗M 个数,不能重复使用集合中的数,如果 SS 中的整数不够 MM 对,则取到不能取 ...
- bzoj 4373 算术天才⑨与等差数列
4373: 算术天才⑨与等差数列 Time Limit: 10 Sec Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.ph ...
- (暂时弃坑)(半成品)ACM数论之旅18---反演定理 第二回 Mobius反演(莫比乌斯反演)((づ ̄3 ̄)づ天才第一步,雀。。。。)
莫比乌斯反演也是反演定理的一种 既然我们已经学了二项式反演定理 那莫比乌斯反演定理与二项式反演定理一样,不求甚解,只求会用 莫比乌斯反演长下面这个样子(=・ω・=) d|n,表示n能够整除d,也就是d ...
- BZOJ 4373: 算术天才⑨与等差数列 线段树
Description 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能 ...
- bzoj 4373: 算术天才⑨与等差数列 hash
题目链接 题目大意: 给你n个数, 给两种操作, 一种给你l, r, k,问你[l, r]区间里的数排序后能否构成一个公差为k的等差数列. 另一种是将位置x的数变为y. 强制在线. 可以用hash来 ...
- bzoj 4912: [Sdoi2017]天才黑客
Description Solution 这个题和点没什么关系 , 之和边与边之间关系有关 , 我们就把边看作点 , 边权就是 \(lcp\) , 点权看作这条边本来的权值. 现在考虑两两连边 , \ ...
- BZOJ 4373 算术天才⑨与等差数列 线段树+set(恶心死我了)
mdzz,这道题重构了4遍,花了一个晚上... 满足等差数列的条件: 1. 假设min是区间最小值,max是区间最大值,那么 max-min+k(r−l) 2. 区间相邻两个数之差的绝对值的gcd=k ...
- AC日记——算术天才⑨与等差数列 bzoj 4373
4373 思路: 判断一个数列是否是等差数列: 1,最大值减去最小值==(区间个数-1)*k: 2,gcd==k: 3,不能有重复(不会这判断这一条,但是数据水就过了): 来,上代码: #includ ...
- ACM学习历程—BZOJ 2115 Xor(dfs && 独立回路 && xor高斯消元)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 题目大意是求一条从1到n的路径,使得路径xor和最大. 可以发现想枚举1到n的所有路 ...
随机推荐
- 一文搞懂 ARM 64 系列: ADD(立即数版)
汇编中,加法指令很重要,因为它是执行其他很多指令的基础. 同时,加法指令也会影响NZCV标志.有关NZCV的介绍,可以参看<一文搞懂 ARM 64 系列: ADC>. ARM64汇编中,A ...
- ARC133D Range XOR
ARC133D Range XOR 题目链接:[ARC133D] Range XOR 非常好数位 dp. 思路 根据异或的前缀和,我们可以把式子化成这样. \[\sum_{i=l}^r\sum_{j= ...
- P5987 [PA2019] Terytoria / 2023NOIP A层联测13 T3 全球覆盖
P5987 [PA2019] Terytoria / 2023NOIP A层联测13 T3 全球覆盖 题面及数据范围 对于一个点对,可以降维为线段,转化为 1 维的问题. 如图: 我们可以在横着的方向 ...
- []JSR 133 (Java Memory Model) FAQ
JSR 133 (Java Memory Model) FAQ Jeremy Manson and Brian Goetz, February 2004 内容列表 究竟什么是内存模型? 其它语言,像C ...
- apache+jk+tomcat集群+session同步
apache2+tomcat5.5集群+session同步 作者:刘宇 liuyu.blog.51cto.com msn群:mgroup49073@hotmail.com (linuxtone) ...
- golang配置读取值viper
viper简介 Viper是Go应用程序的完整配置解决方案,包括12-Factor应用程序.它旨在在应用程序中工作,并且可以处理所有类型的配置需求和格式.它支持: 设置默认值 从JSON.TOML.Y ...
- Blazor 组件库 BootstrapBlazor 中Card组件介绍
一个较为完整的Card样子 Card组件介绍 Card组件分为三部分,CardHeader.CardBody.CardFooter. 代码格式如下: <Card> <CardHead ...
- Codeforces Round 797 (Div
Codeforces Round 797 (Div. 3) Price Maximization 给定\(n\)个商品(n为偶数),每个商品的重量为\(a_i\),你需要将其两两打包,打包的成本为\( ...
- VLC web(http)控制 (4) 服务器文件获取
通过链接 http://127.0.0.1:8080/requests/browse.xml?uri=file%3A%2F%2F~ 可以获取服务器默认目录所有文件. 其中file%3A%2F%2F~是 ...
- PM-数据治理-数据资产管理
在组织中,并非所有的数据都构成数据资产,数据资产是能够为组织产生价值的数据,数据资产的形成需要对数据进行主动管理并形成有效控制. 数据资产管理是规划.控制和提供数据及信息资产的一组业务职能,包 ...