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. CDN-常用静态资源公共库

    js.css 等静态资源可以放在自己的服务器上,或者引用网络上的公共库使用(CDN) CDN 读取失败时从本地加载 <script src="https://code.jquery.c ...

  2. 使用百度云 BOS 和 C# SDK 开发数据存储

    Ø  简介 本文主要介绍如何使用百度云的 C# SDK 操作 BOS(Baidu Object Storage/百度对象存储),以及常见问题和解决办法.本文将以以下几点展开学习: 1.   基本介绍 ...

  3. Java(13) 抽象和封装

    一.简述从现实世界中抽象出类的步骤 第一:找出分类(分析出类) 第二:找出类的特征(分析类的相关属性) 第三:找出类的行为(分析类的方法) 二.常量(经常出现的变量值) 2.1 语法: public ...

  4. python 去除html 超链接href 如何实现?

    今天持久男 在抓取数据的时候发现很多内容都加了锚文本, 这怎么办呢? 没办法只能通过工具解决 我是这样解决的: 例如: soup = BeautifulSoup('<p>Hello < ...

  5. Django 框架初步了解

    Django框架初探 1.web框架介绍 本质 socket 服务端 : 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.建立网络通信连接至少要一对端口号(s ...

  6. h5页面使用js实现保存当前图片到手机相册

    很可惜,这个鬼东西微信内置浏览器不适用 页面: <!doctype html> <html> <head> <meta charset="UTF-8 ...

  7. 使用window.performance分析web前端性能

    参考链接:https://blog.csdn.net/lovenjoe/article/details/80260658

  8. 【Flask】Flask学习笔记(一) 应用基本结构

    初始化 使用前必须创建一个应用实例 from flask import Flask app = Flask(__name__) 路由和视图函数 请求流程 客户端(web浏览器)-->  web服 ...

  9. postgresql分析函数

    参考:https://blog.csdn.net/haohaizijhz/article/details/83340814 SELECT uid, odate, num, sum(num) over ...

  10. LeetCode 21. Merge Two Sorted Lists(c++)

    要定义两个链表 判断时依次对应每一个链表的值进行判断即可. /** * Definition for singly-linked list. * struct ListNode { * int val ...