AtCoder Beginner Contest 260 E // 双指针 + 差分
题目传送门:E - At Least One (atcoder.jp)
题意:
给定大小为N的两个数组A,B,求长度分别为1~M的满足以下条件的连续序列数量,条件为:
对于每个i(从1~N),Ai和Bi至少有一个包含于此序列之内。
思路:双指针 + 差分
容易知道,当序列[L, R]是满足条件的连续序列时,则左边界向左拓展,右边界向右拓展时,得到的新序列依旧满足条件。
那么我们枚举左边界L,然后移动右边界,使得其为满足条件的最小右边界(记为Rmin),则长度在[Rmin - L + 1, M - L + 1]之间的答案都增加1,可以用双指针+差分实现。
代码参考:
//Jakon; Two Pointers and Difference
#include <bits/stdc++.h>
using namespace std; const int N = 200010; int n, m, cnt[N], ans[N];
vector<int> v[N]; int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++)
{
int a, b;
scanf("%d%d", &a, &b);
v[a].push_back(i), v[b].push_back(i);
} int sum = 0;
for(int i = 1, j = 0; i <= m && j <= m; i++)
{
//以i为左边界,找到满足条件的最小右边界j
while(sum < n && j < m) {
++ j;
for(auto& idx : v[j]) {
++ cnt[idx];
if(cnt[idx] == 1) ++ sum;
}
}
//若区间[i, j]满足条件,则长度在[j-i+1, m-i+1]的答案都+1,即以i为左边界的所有可能情况都+1
if(sum == n && j <= m) {
++ ans[j - i + 1], -- ans[m - i + 2];
}
//左边界i要右移一位,于是先把原本i的贡献去掉
for(auto& idx : v[i]) {
-- cnt[idx];
if(cnt[idx] == 0) -- sum;
}
} for(int i = 1; i <= m; i++) cout << (ans[i] += ans[i - 1]) << " ";
cout << endl; return 0;
}
AtCoder Beginner Contest 260 E // 双指针 + 差分的更多相关文章
- AtCoder Beginner Contest 260 (D-E)
AtCoder Beginner Contest 260 - AtCoder D - Draw Your Cards 题意:N张卡牌数字 1-n,以某种顺序排放,每次拿一张,如果这一张比前面某一张小( ...
- AtCoder Beginner Contest 260 G // imos(累积和算法)
题目传送门:G - Scalene Triangle Area (atcoder.jp) 题意: 给定大小为N*N的OX矩阵,若矩阵的(s,t)处为O,其覆盖范围为:满足以下条件的所有位置(i,j) ...
- AtCoder Beginner Contest 260 F - Find 4-cycle
题目传送门:F - Find 4-cycle (atcoder.jp) 题意: 给定一个无向图,其包含了S.T两个独立点集(即S.T内部间的任意两点之间不存在边),再给出图中的M条边(S中的点与T中的 ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
随机推荐
- 图文详解:小白也能看懂的 Kubernetes
Kubernetes 这个单词来自于希腊语,含义是舵手或领航员 .其词根是 governor 和 cybernetic.K8s 是它的缩写,用 8 字替代了"ubernete". ...
- 被迫开始学习Typescript —— vue3的 props 与 interface
vue3 的 props Vue3 的 props ,分为 composition API 的方式以及 option API 的方式,可以实现运行时判断类型,验证属性值是否符合要求,以及提供默认值等功 ...
- 520,用Python定制你的《本草纲目女孩》
摘要:让我们来用Python定制出心仪的"本草纲目女孩",敲出魔性的代码舞蹈,520,准备好心仪女孩的舞蹈视频,把这份别出心裁的礼物给TA 本文分享自华为云社区<[云驻共创] ...
- 将CSV格式或者EXCEL格式的文件导入到HIVE数据仓库中
学习内容:数据导入,要求将CSV格式或者EXCEL格式的文件导入到HIVE数据仓库中: ①hive建表:test1 create table test1 (InvoiceNo String, Stoc ...
- node包的降版本
1.安装版本更高的node包直接到官网去安装. 2.从版本高的node包,降低到版本低的node包. 要先卸载现在的node包,在菜单栏中可以删除. 然后通过https://nodejs.org/zh ...
- A* K短路
注:\(A*\) 求解K短路效率极其低下,时间复杂度\(O(nklog\ n)\),空间视题目而定,因为本质是爆搜,可求解数据范围较小的题目. 我们使用\(A*\)求解k短路: 首先需要预处理出估价函 ...
- ACW:831. KMP字符串
感觉这道题非常有意思,学的过程中觉得及难,学完之后觉得及简单,看y总的视频没有看懂...,因此自己找了一篇博文理解并完成题目. import java.io.*; /** * @author admi ...
- 【爬虫+情感判定+Top10高频词+词云图】"王心凌"热门弹幕python舆情分析
目录 一.背景介绍 二.代码讲解-爬虫部分 2.1 分析弹幕接口 2.2 讲解爬虫代码 三.代码讲解-情感分析部分 3.1 整体思路 3.2 情感分析打标 3.3 统计top10高频词 3.4 绘制词 ...
- Markdown的使用指南
# Markdown学习 ------ 以下符号均是英文输入法下的 ## 1.标题 几级标题就写 几个#号 加 空格 加 标题内容 就可以 例如: ###加空格加三级标题效果如下 ### 三级标题 # ...
- 聊聊 C# 方法重载的底层玩法
最近在看 C++ 的方法重载,我就在想 C# 中的重载底层是怎么玩的,很多朋友应该知道 C 是不支持重载的,比如下面的代码就会报错. #include <stdio.h> int say( ...