「LibreOJ#516」DP 一般看规律
首先对于序列上一点,它对答案的贡献只有与它的前驱和后驱(前提颜色相同)构成的点对,
于是想到用set维护每个颜色,修改操作就是将2个set暴力合并(小的向大的合并),每次插入时更新答案即可
颜色数要离散化,或者用map也行
Code
#include <cstdio>
#include <set>
#include <map>
#define N 100010
using namespace std; int n,m,Ans=2147483647;
map<int,set<int>> A; inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} void upd(int c,int p){
auto it=A[c].lower_bound(p);
if(it!=A[c].end()) Ans=min(Ans,(*it)-p);
if(it!=A[c].begin()) --it,Ans=min(Ans,p-(*it));
A[c].insert(p);
} int main(){
n=read(),m=read();
for(int i=1;i<=n;++i){int x=read();upd(x,i);}
for(;m--;){
int x=read(),y=read();
if(x==y){printf("%d\n",Ans);continue;}//考虑特殊情况
if(A[x].size()>A[y].size()) swap(A[x],A[y]);
for(int it:A[x]) upd(y,it);
A[x].clear();//合并后应清空
printf("%d\n",Ans);
}
return 0;
}
「LibreOJ#516」DP 一般看规律的更多相关文章
- [LOJ#516]「LibreOJ β Round #2」DP 一般看规律
		
[LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\ ...
 - LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律
		
二次联通门 : LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 /* LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 set ...
 - loj516 「LibreOJ β Round #2」DP 一般看规律
		
传送门:https://loj.ac/problem/516 [题解] 那段代码求的是相同的数中间隔最小的值. 离散后用set维护每个值出现次数,每次操作相当于合并两个set,这步可以启发式合并. 加 ...
 - 「SAP技术」SAP 如何看序列号被包在哪些HU里?
		
「SAP技术」SAP 如何看序列号被包在哪些HU里? 事务代码SE16 ,表名OBJK, 输入物料号,序列号,HeadTable 输入值SER06, 查询结果如下, 根据objlist, 去表ser0 ...
 - 2018.10.14 loj#516. DP 一般看规律(启发式合并)
		
传送门 注意到一种颜色改了之后就不能改回去了. 因此可以启发式合并. 每次把小的合并给大的. 这样每个数最多被合并logloglog次. 如果维护一棵比较下标的平衡树的话,对于答案有贡献的就是每个数与 ...
 - [LOJ#500]「LibreOJ β Round」ZQC的拼图
		
题目 点这里看题目. 分析 首先不难发现答案具有单调性,因此可以二分答案.答案上限为\(V=2m\times \max\{a_i, b_i\}\). 考虑如何去判断当前的答案.设这个答案为 ...
 - loj516 DP一般看规律(set启发式合并)
		
题目: https://loj.ac/problem/516 分析: 每次将一个颜色更改为另一个颜色相当于将两个集合合并 然后对于答案的更新,一个点插入到一个集合中,那么可能更新答案的就是其前驱节点或 ...
 - loj#500 「LibreOJ β Round」ZQC 的拼图
		
分析 二分倍数 然后考虑dp[i][j]表示选到第i个x轴覆盖到j的情况y轴最多覆盖多少 贡献柿子可以画图然后相似三角形得到 代码 #include<bits/stdc++.h> usin ...
 - LOJ#505. 「LibreOJ β Round」ZQC 的游戏(最大流)
		
题意 题目链接 Sol 首先把第一个人能吃掉的食物删掉 然后对每个人预处理出能吃到的食物,直接限流跑最大流就行了 判断一下最后的最大流是否等于重量和 注意一个非常恶心的地方是需要把除1外所有人都吃不到 ...
 
随机推荐
- PB调用C#编写的DLL
			
C#以其简单易用,功能强大深受大家喜爱.PowerBuilder作为C/S的MIS开发工具,十分简单灵活,开发时间短,开发及维护成本低,一直是中小企业信息管理系统的首选开发工具.但是PB的局限性限制了 ...
 - 1.appium介绍
			
appium介绍 官方网站 1.特点 appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用. “移动原生应用”是指那些用iOS或者 An ...
 - Windows漏洞利用技术概述
			
Windows漏洞利用技术总结 1. 前言 本文是我对漏洞利用技术的学习总结,也是自己践行QAD (Questions.Answer.Discussions)的一次实践.本文通过阅读几位大牛的文章.演 ...
 - thinkphp5设置403 404等http状态页面
			
在thinkphp5中如何抛出异常状态码(比如401,403,404等),因为这些能极大的给用户以良好的体验. 因为在上线阶段,任何的系统错误信息都不能让浏览用户给看到,比如404(Not Found ...
 - SQA和测试规程
			
SQA *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; ...
 - (转)每天一个linux命令(1):ls命令
			
ls命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linu ...
 - mobile easyui兼容实体数据(tree插件为例)
			
ORM的实体类和数据库的类是一一对应的,如果有多级的嵌套循环json返回到前台为了方便展示可以使用mobile easyui,但是mobile easyui又需要特定的属性才可以,比如id,text, ...
 - com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException 异常
			
MySQL完整性约束破坏异常:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException 在单向多对一关联关系 ...
 - LA 4327 多段图
			
题目链接:https://vjudge.net/contest/164840#problem/B 题意: 从南往北走,横向的时间不能超过 c: 横向路上有权值,求权值最大: 分析: n<=100 ...
 - 【洛谷P1726】上白泽慧音
			
上白泽慧音 题目链接 强联通分量模板题,Tarjan求强联通分量,记录大小即可 #include<iostream> #include<cstring> #include< ...