Codeforces 1237B. Balanced Tunnel
这一题有点意思
首先预处理出 $pos[x]$ 表示编号 $x$ 的车是第几个出隧道的
然后按进入隧道的顺序枚举每辆车 $x$ 考虑有哪些车比 $x$ 晚进入隧道却比 $x$ 早出隧道
显然是 $1$ 到 $pos[x]$ 中还没访问过的车,那么暴力做法就是这样枚举然后看看有哪些没标记并打上标记
注意到每辆车只要打上一个标记即可,并且每次打标记都只在一段前缀区间内
那么维护一下 $r$ 表示之前打标记的区间的最右端,每次只要考虑 $[r,pos[x]]$ 即可(注意 $pos[x]$ 本身不用打标记,不产生贡献)
均摊复杂度 $O(n)$(代码实现时可以省略标记数组)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=2e5+;
int n,pos[N];
struct dat {
int x,y;
inline bool operator < (const dat &tmp) const {
return x!=tmp.x ? x<tmp.x : y<tmp.y;
}
}A[N];
bool vis[N];
int main()
{
n=read(); int ans=;
for(int i=;i<=n;i++) A[i].x=read();
for(int i=;i<=n;i++) A[i].y=read(),pos[A[i].y]=i;
int l=,r=;
for(int i=;i<=n;i++)
{
r=max(r,pos[A[i].x]);
for(int k=l;k<r;k++)
{
ans++;
vis[A[k].y]=;
}
l=r+;
}
printf("%d\n",ans);
return ;
}
Codeforces 1237B. Balanced Tunnel的更多相关文章
- [Codeforces 873B]Balanced Substring
Description You are given a string s consisting only of characters 0 and 1. A substring [l, r] of s ...
- CodeForces - 873B Balanced Substring(思维)
inputstandard input outputstandard output You are given a string s consisting only of characters 0 a ...
- Codeforces 873B - Balanced Substring(思维)
题目链接:http://codeforces.com/problemset/problem/873/B 题目大意:一个字符串全部由‘0’和‘1’组成,当一段区间[l,r]内的‘0’和‘1’个数相等,则 ...
- Codeforces 1237F. Balanced Domino Placements
传送门 很妙的题 首先先考虑一个简化的问题,现在有一行格子让你填 你要么填一格 要么填两格 有的格子不让你填 问你填了 $a$ 个一格和填了 $b$ 个两格有多少种方案 那么显然先只考虑放两格的方案, ...
- Codeforces 1237E. Balanced Binary Search Trees
传送门 这一题是真的坑人,时间空间都在鼓励你用 $NTT$ 优化 $dp$...(但是我并不会 $NTT$) 看到题目然后考虑树形 $dp$ ,设 $f[i][0/1]$ 表示 $i$ 个节点的树,根 ...
- Codeforces 1237D. Balanced Playlist
传送门 首先显然的,如果一个位置开始播放了两圈还没结束,那么就永远不会结束 先考虑位置 $1$ 开始播放,用一个 $multisetset$ 维护一下当前听的所有歌,直到某一首歌 $r$ 不合法了就停 ...
- Codeforces 1237C2. Balanced Removals (Harder)
传送门 先来考虑一下二维时的情况,那么对于 $x$ 相同的点,我们按 $y$ 排序,然后相邻的一对对消除 最后 $x$ 坐标相同的点最多剩下一个,那么此时所有点的 $x$ 坐标都不一样 再按 $x$ ...
- Codeforces--Balanced Tunnel
问题重述 Codeforces --- Balanced Tunnel 见链接http://codeforces.com/contest/1237/problem/B. Solve 这道题的本质是找递 ...
- Codeforces Global Round 5
传送门 A. Balanced Rating Changes 签到,分正负搞一下就行. B. Balanced Tunnel 题意: 给出\(n\)辆车的进洞顺序和出洞顺序,问有多少量车实现了洞中超车 ...
随机推荐
- PySpider的安装
使用 Pip 安装,命令如下 pip install pyspider 命令执行完毕即可安装成功. 常见错误: Windows 下可能会出现这样的错误提示:Command "python s ...
- markdown简单的使用方法
转自 https://www.cnblogs.com/math/p/se-tools-001.html 作者:正交分解 1.如何切换编辑器 切换博客园编辑器为MarkDown:MarkDown Edi ...
- LeetCode 200. 岛屿的个数(Number of Islands)
题目描述 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1 ...
- C#实现MJPEG服务器
实现流写入,将图像作为mjpeg写入 public class MjpegWriter : IDisposable { , }; , , , }; private string _Boundary; ...
- [go]socket编程
socket特性 总是成对出现 是全双工的(同时支持收发)(两个channel绑在一起) 应用程序 - cs模式(客户端开发) - bs模式(web开发) net包api基础 都是客户端主动发数据(c ...
- Ubuntu16.04格式化U盘
root@ubuntu:~# fdisk -l root@ubuntu:~# fdisk /dev/sdb 格式化U盘: root@ubuntu:~# fdisk -l sudo mkfs.ntfs ...
- 实验一 绘制任意斜率的直线段 | 使用VS2017工具
这世界上有很多坑,注定有些坑是要填的.下面我就用VS2017使用MFC对这个课堂实验进行填坑. 一.实验目的 (1)掌握任意斜率直线段的重点 Bresenham 扫描转换算法: (2)掌握 Cline ...
- Qt编写自定义控件13-多态进度条
前言 多态进度条,顾名思义,有多重状态,其实本控件主要是用来表示百分比进度的,由于之前已经存在了百分比进度条控件,名字被霸占了,按照先来先得原则,只好另外取个别名叫做多态进度条,应用场景是,某种任务有 ...
- SqlServer/Oracle 通过一个sql判断新增/修改
if (Config.DbInfo.DbType.Equals(DBType.SQLServer)) { sql = ].GetString() + ].GetString() + ].GetStri ...
- JAVA 基础编程练习题8 【程序 8 输入数字求和】
8 [程序 8 输入数字求和] 题目:求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字.例如 2+22+222+2222+22222(此时共有 5 个 数相加),几个数相加 ...