ZOJ - 4089

思路:可以反正 最长重构序列必然符合  此模式 x  +  {   }  与  {   }  +  x

那么 题意转化为了  找两个距离最长的相同的数。eeee 先离散化

然后 开 2e5 个set 可插入可删除的维护 每个数的 出现的位置。

然后 。 如果有set .size > = 2 则可以更新。最值 。最值可用线段树or mulitset 维护

#include<bits/stdc++.h>
using namespace std;
#define maxn 223456
map<int,int>vis;
set<int>val[maxn];
set<int>::iterator it,ib;
int tree[maxn*4],n,ans;
int t,a[maxn],m,cnt,op,x,y;
void up(int root)
{
tree[root]=max(tree[root*2],tree[root*2+1]);
}
void updata(int root,int l,int r,int pos,int ad)
{
if(pos>r||pos<l)return ;
if(l==r)
{
tree[root]=ad;
return;
}
int mid=(l+r)/2;
updata(root*2,l,mid,pos,ad);
updata(root*2+1,mid+1,r,pos,ad);
up(root);
}
int main()
{
scanf("%d",&t);
while(t--)
{
vis.clear();
for(int i=0; i<=cnt; i++)
val[i].clear();
memset(tree,0,sizeof(tree));
cnt=0;
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
if(vis[a[i]]==0)
vis[a[i]]=++cnt;
val[vis[a[i]]].insert(i);
}
for(int i=1; i<=cnt; i++)
{
if(val[i].size()>=2)
{
ib=--(val[i].end());
it=val[i].begin();
int dd=*ib-*it;
updata(1,1,cnt,i,dd);
}
}
while(m--)
{
scanf("%d",&op);
if(op==2)
{
if(tree[1]<1)
printf("-1\n");
else
printf("%d\n",tree[1]);
}
else
{
scanf("%d%d",&x,&y);
val[vis[a[x]]].erase(x);
if(val[vis[a[x]]].size()<2)
updata(1,1,cnt,vis[a[x]],0);
else
{
ib=--(val[vis[a[x]]].end());
it=val[vis[a[x]]].begin();
int dd=*ib-*it;
updata(1,1,cnt,vis[a[x]],dd);
}
a[x]=y;
if(vis[y]==0)
vis[y]=++cnt;
val[vis[y]].insert(x);
if(val[vis[a[x]]].size()<2)
updata(1,1,cnt,vis[a[x]],0);
else
{
ib=--(val[vis[a[x]]].end());
it=val[vis[a[x]]].begin();
int dd=*ib-*it;
updata(1,1,cnt,vis[a[x]],dd);
}
}
}
}
return 0;
}

  

Little Sub and Isomorphism Sequences ZOJ - 4089的更多相关文章

  1. ZOJ Monthly, January 2019 Little Sub and Isomorphism Sequences 【离线离散化 + set + multiset】

    传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5868 Little Sub and Isomorphism Seque ...

  2. ZOJ - 4089 :Little Sub and Isomorphism Sequences (同构 set)

    Little Sub has a sequence . Now he has a problem for you. Two sequences of length and of length are ...

  3. ZOJ Monthly, January 2019 I Little Sub and Isomorphism Sequences(set 妙用) ZOJ4089

    写这篇博客来证明自己的愚蠢 ...Orz  飞机 题意:给定你个数组,以及一些单点修改,以及询问,每次询问需要求得,最长的字串长度,它在其他位置存在同构 题解:经过一些奇思妙想后 ,你可以发现问题是传 ...

  4. ZOJ-4089-Little Sub and Isomorphism Sequences

    给定你个数组,以及一些单点修改,以及询问,每次询问需要求得,最长的字串长度,它在其他位置存在同构. 当存在两个不相交的区间同构时,如: 1.2.…….n -1.n.n + 1.…….m.m + 1.m ...

  5. ZOJ Monthly, January 2019

    A: Little Sub and Pascal's Triangle Solved. 题意: 求杨辉三角第n行奇数个数 思路: 薛聚聚说找规律,16说Lucas 答案是 $2^p \;\;p 为 n ...

  6. ZOJ Problem Set - 1338 Up and Down Sequences 解释 ac代码

    这道题目我一开始一头雾水,怎么都数不对,参考了下网上的博文,才弄懂. 题意是这样的,如果是上升序列,上升序列的长度不是所有上升数字的,是这么规定的,如果它与前一个数字构成上升,那么这个数字算上长度.所 ...

  7. ZOJ 3861 - Valid Pattern Lock

    3861 - Valid Pattern Lock Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & ...

  8. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  9. ZOJ 3233 Lucky Number

    Lucky Number Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...

随机推荐

  1. finalize()与PhantomReference学习笔记

    众所周知,Java语言提供了自动垃圾回收机制,使得程序员不用考虑自己释放不再使用的内存.既然回收内存的活都让Java自己干了,程序员在这方面能干的事情就不多了.尽管如此,Java也提供了一些让程序员对 ...

  2. 史上最简单的Docker入门教程

    安装Ubuntu Docker 安装 CentOS Docker 安装 Windows Docker 安装 MacOS Docker 安装 这里我的电脑是mac,采用brew安装,安装完毕记得更换国内 ...

  3. AForge调用摄像头拍照时设置分辨率

    简单记录下AForge2.2.5.0版本调用摄像头拍照时设置分辨率的方法. FilterInfo info = _videoDevices[0];//获取第一个摄像头 _cameraDevice = ...

  4. SAVEPOINT 标记

    create table duo(               --创建表格                v_xuhao number(3),                v_name varch ...

  5. Fastjson反序列化漏洞研究

    0x01 Brief Description java处理JSON数据有三个比较流行的类库,gson(google维护).jackson.以及今天的主角fastjson,fastjson是阿里巴巴一个 ...

  6. Web开发常见安全问题

    转载自: http://blog.csdn.net/fengyinchao/article/details/50775121 不是所有 Web 开发者都有安全的概念,甚至可能某些安全漏洞从来都没听说过 ...

  7. MongoDB代码——Python篇

    需要安装的库:pymongo 一.添加文档 from pymongo import MongoClient # 连接服务器 conn = MongoClient("localhost&quo ...

  8. js原型杂谈

    1.通俗点讲原型对象就是内存中为其他对象提供共享属性和方法的对象. 2.所有原型对象都具备一个constructor属性,这个属性是一个指向包含prototype属性函数的一个指针(敢不敢再绕点!). ...

  9. Shell中字符串的切割、拼接、比较、替换

    [截取] 一.Linux shell 截取字符变量的前8位,有方法如下: expr substr “$a” 1 8 : 二.按指定的字符串截取 第一种方法: ${varible##*string} # ...

  10. aptitude与apt-get

    aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具.与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些.举例来说,aptitud ...