STL

这。。。我只能说是。。。考得是。。。

STL的正确用法?

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<bitset>
#define ll unsigned long long
#define pi 3.14
#define eps 1e-9
#define inf 2147483233
#define m(a) memset(a,0,sizeof(a))
#define M(a) memset(a,127,sizeof(a))
#define REP(i,m,n) for(int i=1;i<=n;i++)
#define DWN(i,n,m) for(int i=n;i>=1;i++)
#define lowbit(x) x&(-x)
#define SS set<int>
using namespace std;
map <int,SS> mp;
int n,m,x,ans=inf;
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()) it--,ans=min(ans,y-*it);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&x);
update(x,i);
mp[x].insert(i);
}
for(int i=;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
if(a==b)
{
printf("%d\n",ans);
continue;
}
if(mp[a].size()>mp[b].size()) swap(mp[a],mp[b]);
for(set<int>::iterator it=mp[a].begin();it!=mp[a].end();it++)
{
update(b,*it);
mp[b].insert(*it);
}
mp[a].clear();
printf("%d\n", ans);
}
return ;
}

最新文章

  1. POJ2406Power Strings[KMP 失配函数]
  2. 跟我从零基础学习Unity3D开发--NGUI入门基础
  3. textarea 多行文本保存数据到DB,取出后恢复换行
  4. GNU GCC 扩展属性
  5. 译 PrestaShop开发者指南 第三篇 设置本地安装环境
  6. html5 (个人笔记)
  7. Linux内核之旅 List_entry()
  8. 微信Api
  9. POJ 1160 Post Office
  10. 设置mysql服务器远程连接
  11. vmware克隆centos6.5 导致 system eth0 不可用解决办法
  12. java 静态内部类特点
  13. 更新UI
  14. java随机数生成的原理
  15. 【Spark2.0源码学习】-10.Task执行与回馈
  16. 学习java线程学习笔记
  17. 设置文件opendilag、savedilog默认路径和文件类型
  18. ORM对象关系映射之GreenDAO源码解析
  19. vim 的编辑模式 命令模式
  20. 【刷题】LOJ 6227 「网络流 24 题」最长k可重线段集问题

热门文章

  1. 大数据学习系列(7)-- hadoop集群搭建
  2. bilingual evaluation understudy
  3. Bootstrap 第一天
  4. 关于Unicode转为str的方法
  5. php线程pthread实践
  6. Tab动画菜单
  7. Recovery模式【转】
  8. hadoop集群增加新节点
  9. SpringCloud之Eureka高可用集群环境搭建
  10. 剑指offer之 O(1)时间删除链表结点