题目描述

给定一个长度为 n 的序列 a,一共有 m 个操作。
每次操作的内容为:给定 x,y,序列中所有 x 会变成 y。

同时我们有一份代码:


int ans = 2147483647;
for (int i = 1; i <= n; i++) {for (int j = i + 1; j <= n; j++) {if (a[i] == a[j])ans = std::min(ans, j - i);}
}
std::cout << ans << std::endl;

请在每次修改后输出代码运行的结果。

输入格式

第一行两个数,表示 n,m。
第二行 n 个数,表示 a1,a2,⋯,an .
然后 m 行每行两个数 x 和 y,表示序列中所有 x 会变成 y。

输出格式

对于每次修改,输出答案。

样例

样例输入

5 10
2 7 6 3 8
6 1
7 1
1 3
5 6
1 7
9 5
1 10
7 6
7 5
3 9

样例输出

2147483647
1
1
1
1
1
1
1
1
1

数据范围与提示

1≤n,m≤1000001≤n,m≤1000001≤n,m≤100000

每个出现的数字绝对值在 int 范围内。

Solution

  • 题意:给出 MMM 个操作,将长度为 N" role="presentation" style="position: relative;">NNN 序列中 所有的 某一个数字替换为另一个,

  • 询问每次操作后距离最近的两个 相同 数字的距离。

  • 由于每个位置上的数都只对它的 前驱和后继 产生影响,

  • 于是我们开 NNN 个 set" role="presentation" style="position: relative;">setsetset (每个数一个),每次启发式合并,将较小的暴力合并到大的上面。

  • 每次在 setsetset 上 lower_bound()lower_bound()lower\_bound() 计算前驱和后继的贡献即可。

  • 如果不想离散化就用个 mapmapmap 来存这 NNN 个 set" role="presentation" style="position: relative;">setsetset 。

  • 时间复杂度 O(N log N)O(NlogN)O(N\ log\ N) ,常数较大。

Code

#include<cstdio>
#include<algorithm>
#include<set>
#include<map>
#include<cctype>
using namespace std;
map<int,set<int> >mp;
int ans=2147483647;
inline int read()
{int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
inline void write(int x)
{if(x>9) write(x/10);putchar(x%10+'0');
}
inline int min(int x,int y)
{return x<y?x:y;
}
inline void update(int x,int y)
{set<int>::iterator it=mp[x].lower_bound(y);if(it!=mp[x].end()) ans=min(ans,*it-y);if(it!=mp[x].begin()) ans=min(ans,y-*--it);
}
int main()
{int n=read(),m=read();for(int i=1;i<=n;i++){int x=read();update(x,i);mp[x].insert(i);}while(m--){int x=read(),y=read();if(x^y){if(mp[x].size()>mp[y].size()) swap(mp[x],mp[y]);for(set<int>::iterator it=mp[x].begin();it!=mp[x].end();it++){update(y,*it);mp[y].insert(*it);}mp[x].clear();}write(ans),putchar('\n');   }return 0;
}

LOJ #516. 「LibreOJ β Round #2」DP 一般看规律相关推荐

  1. [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机)

    [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机) 试题描述 IOI 的比赛开始了.Jsp 和 Rlc 坐在一个角落,这时他们听到了一个异样的声音 -- 接着他们发现自己收 ...

  2. [LOJ #521]「LibreOJ β Round #3」绯色 IOI(抵达)(结论)

    #521. 「LibreOJ β Round #3」绯色 IOI(抵达) description solution 因为点的庇护所不能为自身,题目背景在树上,有结论一定是两个相邻点互为庇护所 所以树一 ...

  3. loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分...

    $ \color{#0066ff}{ 题目描述 }$ 「Hanabi, hanabi--」 一听说祭典上没有烟火,Karen 一脸沮丧. 「有的哦-- 虽然比不上大型烟花就是了.」 还好 Shinob ...

  4. [线段树分治][DP] LOJ #534. 「LibreOJ Round #6」花团

    Solution S o l u t i o n Solution 操作相当于是动态的做一个背包DP. 离线的话,线段树分治一下. 因为结尾是已知的,可以一边分治,得到一个修改操作,就插到线段树. 只 ...

  5. LOJ 572 「LibreOJ Round #11」Misaka Network 与求和——min_25筛

    题目:https://loj.ac/problem/572 莫比乌斯反演得 \( ans=\sum\limits_{D=1}^{n}\left\lfloor\frac{n}{D}\right\rflo ...

  6. 【费用流】loj#545. 「LibreOJ β Round #7」小埋与游乐场

    好像现在看来这个缩点的思路挺清晰啊 题目描述 有两个非负整数组成的可重集合 $A$ 和 $B$. 现在你可以对 $A$ 中至多 $k$ 个元素进行操作.操作方法为:设你准备操作且未被操作过的 $A$ ...

  7. [费用流] LOJ#545. 「LibreOJ β Round #7」小埋与游乐场

    有两种操作是有效的 lowbit(ai)>lowbit(bj)lowbit(ai)>lowbit(bj)lowbit(a_i)>lowbit(b_j) 或者 ai=bjai=bja_ ...

  8. loj 523 「LibreOJ β Round #3」绯色 IOI(悬念) 霍尔定理+基环树+线段树

    题目分析 神仙题(确信) 首先,j−aij-a _ ij−ai​和ai−ja _ i-jai​−j互为相反数,若其中最小值为bib _ ibi​,则一个为bib _ ibi​一个为m−bim-b _ ...

  9. Loj#572. 「LibreOJ Round #11」Misaka Network 与求和

    题目 有生之年我竟然能\(A\) 这个题求的是这个 \[\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))^k\] \(f(i)\)定义为\(i\)的次大质因子,其中\(f(p)= ...

最新文章

  1. 安装npm_前端开发:node.js的node包管理器npm安装以及使用
  2. UVA 11491 Erasing and Winning 奖品的价值 (贪心)
  3. Java中的关键字——final
  4. 如何查看Eclipse版本
  5. C++ —— C++高手之路
  6. Hi3519V101开发环境搭建(一)
  7. 设计模式再学习之单例模式
  8. 使用计算机进行电路分析,计算机辅助电路分析,computer aided analysis of circuits,音标,读音,翻译,英文例句,英语词典...
  9. zuul网关_SpringCould之服务网关(zuul)介绍与配置
  10. 【C语言】C语言入门经典题目(范围广,内容多)
  11. 前端实现序列帧_canvas实现序列帧动画的案例
  12. Docker 镜像地址修改
  13. 监控摄像头网页直播解决方案
  14. css transition opacity,CSS transition属性
  15. 刺客信条奥德赛ce修改技能点_刺客信条奥德赛特长加点
  16. C++中的bool类型
  17. Allegro学习进行时
  18. 项目管理的完整流程是怎样的?
  19. Java算法--第二章--查找与排序(2)递归基础--佩波那契最大公约数插入排序汉诺塔
  20. 2022年9月青少年软件编程(图形化)等级考试试卷--三级--数星星

热门文章

  1. 编程方法学23:搜索排序与算法效率分析
  2. 读书笔记《单核工作法》_3原理2,3
  3. [云炬创业基础笔记]第二章创业者测试12
  4. [云炬创业基础笔记]第五章创业机会评估测试12
  5. 同学录APP开题报告 2017-12-14
  6. hex editor怎么搜索代码_代码审计从入门到放弃(三) phplimit
  7. FIR数字滤波器设计频率抽样法MATLAB仿真
  8. 教你理解复杂的C/C++声明
  9. socket中使用多线程创建并发服务器
  10. TCP客户端服务端编程模型