[题解] CF549F Yura and Developers
蒟蒻第一次写紫题题解,大佬轻喷。
题目大意:
给定一个数组 \(a\) 和常数 \(k\),求有多少个子区间满足区间和减去区间最大值是 \(k\) 的倍数。
思路:
考虑使用分治解决。
设区间 \([l,r]\) 最大值为 \(mx\)。
对于 \(i(i\le mid)\) 以 \(i\) 为左端点。
钦定 \(mx\) 在左边,这时只需要枚举右端点,满足 \(a_{mid+1\sim r}\) 这段区间的任何一个数不大于 \(mx\),不难发现可以使用双指针维护出满足上述条件的区间 \((mid,R]\)。
令 \(sum\) 数组为前缀和数组。即:
\]
求 \(r\in(mid,R]\),符合题目条件的个数。
则式子转化为 \(sum_r-sum_{i-1}-mx\equiv 0(mod\ k)\) 符合条件的个数,即 \(sum_r\in sum_{i-1}+mx(mod\ k)\)。
而由于数据很小,\(k\) 只有 \(10^6\),不需要用到 \(map\),开一个桶维护上述式子就可以了。
\(mx\) 在左边的情况搞定了,在右边的情况同理。
复杂度为 \(O(n\log n)\)。
代码:
CP Editor 太好用啦
// Problem: CF549F Yura and Developers
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/CF549F
// Memory Limit: 250 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
/*+ Nimbunny +*/
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define pi pair<int, int>
// #pragma GCC optimize(2)
using namespace std;
const int INF = INT_MAX;
const int mod = 1e9 + 7;
const int N = 1e5 + 10;
int n, m, a[3 * N], sum[3 * N], ans, b[N];
inline int read() {
int x;
cin >> x;
return x;
}
void cdq(int l, int r) {
if (l == r) return;
int mid = l + r >> 1;
cdq(l, mid), cdq(mid + 1, r);
int k = mid, ma = 0;
for (int i = mid; i >= l; i--) {
ma = max(ma, a[i]);
while (k != r && a[k + 1] <= ma) {
k++;
b[sum[k] % m]++;
}
ans += b[(sum[i - 1] + ma) % m];
}
for (int i = mid + 1; i <= r; i++) b[sum[i] % m] = 0;
k = mid + 1, ma = 0;
for (int i = mid + 1; i <= r; i++) {
ma = max(ma, a[i]);
while (k != l && a[k - 1] < ma) {
k--;
b[sum[k - 1] % m]++;
}
ans += b[(sum[i] - ma) % m];
}
for (int i = l; i <= mid; i++) b[sum[i - 1] % m] = 0;
return;
}
signed main() {
cin.tie(nullptr)->sync_with_stdio(false);
n = read(), m = read();
for (int i = 1; i <= n; i++)
sum[i] = sum[i - 1] + (a[i] = read());
cdq(1, n);
cout << ans;
return 0;
}
[题解] CF549F Yura and Developers的更多相关文章
- codeforces 549F Yura and Developers(分治、启发式合并)
codeforces 549F Yura and Developers 题意 给定一个数组,问有多少区间满足:去掉最大值之后,和是k的倍数. 题解 分治,对于一个区间,找出最大值之后,分成两个区间. ...
- Looksery Cup 2015 F - Yura and Developers 单调栈+启发式合并
F - Yura and Developers 第一次知道单调栈搞出来的区间也能启发式合并... 你把它想想成一个树的形式, 可以发现确实可以启发式合并. #include<bits/stdc+ ...
- 【Codeforces549F】Yura and Developers [单调栈][二分]
Yura and Developers Time Limit: 20 Sec Memory Limit: 512 MB Description Input Output Sample Input 4 ...
- Codeforces 549F Yura and Developers
probelm 题意 给定一个序列和一个mod值,定义[l,r]合法当l到r的全部元素和减去当中的最大值的结果能够整除mod.问共同拥有多少区间合法. 思路 一開始想的分治. 对于一个[l,r]我们能 ...
- ●CodeForces 549F Yura and Developers
题链: http://codeforces.com/problemset/problem/549/F题解: 分治,链表. 考虑对于一个区间[L,R],其最大值在p位置, 那么答案的贡献就可以分为3部分 ...
- CF数据结构练习
1. CF 438D The Child and Sequence 大意: n元素序列, m个操作: 1,询问区间和. 2,区间对m取模. 3,单点修改 维护最大值, 取模时暴力对所有>m的数取 ...
- Looksery Cup 2015 Editorial
下面是题解,做的不好.下一步的目标是rating涨到 1800,没打过几次cf A. Face Detection Author: Monyura One should iterate through ...
- Codeforces刷题计划
Codeforces刷题计划 已完成:-- / -- [Codeforces370E]370E - Summer Reading:构造:(给定某些数,在空白处填数,要求不下降,并且相邻差值<=1 ...
- CF549BLooksery Party题解
题目描述 The Looksery company, consisting of nn staff members, is planning another big party. Every empl ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
随机推荐
- Java8 新特性-Lambda表达式
目录 1.Lambda表达式介绍 2.Lambda表达式语法细讲 3. Lambda表达式语法精简 4. Lambda方法引用 5. 综合实例 6. @FunctionalInterface注解 7. ...
- 【记录】Truenas scale|Truenas 的 SSH 服务连不上 VScode,终端能连上
一般 Truenas连不上 就只有两种情况: 第一种:用户没对应用户目录.需要去用户管理里面对每个用户设置目录. 第二种情况,服务有个选项没勾选.这时会发现能输入密码但是一点反应都没有,打开detai ...
- 【ROS】4.1 Turtlebot3仿真Waffle循线跟踪
原视频 本节内容较多,请根据左侧目录针对性阅读. 一.准备工作 这一章我们先用gazebo仿真做,不使用真小车,使用的是Waffle模型. 需要下载的库gazebo-ros.turtlebot3_si ...
- Excel 的 vlookup 函数
突然发现, 大多数的开发, 都不会用 Excel. 想想, 像我这种, 熟练Excel 的函数如 vlookup, sumifs, contif 还会透视表的小哥哥, 已经不多了啦.
- LR_GD_MSE (公式补充)
上篇是先撸了一把梯度下降的代码, 用来优先 LR 中的 MSE. 核心代码是在求解梯度这一步. # y = wx + b def step_gradient(b_current, w_current, ...
- 【UEFI】HOB 从概念到代码
总述 使用 HOB 的原因是因为,在 PEI 阶段内存尚未完全初始化,到了 DXE 阶段才完整初始化了内存,所以无法通过简单的内存地址传递数据,并且我们仍然有一些对于内存空间存储的需求,因此发明了 H ...
- Linux下搭建Kafka集群
摘要 Kafka 是一个分布式的基于push-subscribe的消息系统,它具备快速.可扩展.可持久化的特点.由 LinkedIn 开源,用作 LinkedIn 的活动流(Activity Stre ...
- 玩客云 OEC/OECT 笔记(2) 运行RKNN程序
目录 玩客云 OEC/OECT 笔记(1) 拆机刷入Armbian固件 玩客云 OEC/OECT 笔记(2) 运行RKNN程序 RKNN OEC/OEC-Turbo 使用的芯片是 RK3566/RK3 ...
- ChatMoney让你变成HR高手!
本文由 ChatMoney团队出品 在快节奏的现代职场中,招聘是每一个企业都绕不开的重要环节.然而,传统的招聘流程往往繁琐而低效,从海量简历的筛选,再到后续的评估与决策,每一个环节都耗费着HR人员大量 ...
- QQ号码价值评估系统html代码-丢塔网
由于前面刷视频经常刷到有人直播QQ号码价值评估,想着也搞一个玩玩,找了一圈接口好像很多都用不来,下面提供一个自己随便搞得页面,有兴趣的大佬可以完善下 ` QQ号码价值评估系统-在线工具-丢塔网(www ...