第一步先莫队分块。

  对于每一块l~r,初始右端点设为r+1,然后每个询问先将右端点往右移,然后处理询问在l~r之间的部分,最后用一个栈再把l~r的复原。

  具体来说是维护两个数组now1和now2,一个向右最长的长度,一个向左的长度,每插入一个值x,用x+1的now2更新x的now2,用x-1的now1更新x的now1,now1[x]+now2[x]-1可能为最终答案,再把x所在的最长区间的左右端点的now数组更新,中间的值不需要更新,因为不可能再往中间插入数了。

  有生以来第一次bzoj榜一。

  

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 50005
#define d 223
using namespace std;
int n,m;
int c[N];
int ans[N];
struct node
{
int l,r,id,yuan;
friend bool operator < (node aa,node bb)
{
if(aa.id!=bb.id)return aa.id<bb.id;
return aa.r<bb.r;
}
}a[N];
int now1[N],now2[N];
int st1[N*],st2[N*],top;
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&c[i]);
for(int i=;i<=m;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
a[i].yuan=i;a[i].id=(a[i].l-)/d+;
}
sort(a+,a+m+);
int as=;int r=,t=;
for(int i=;i<=m;i++)
{
if(a[i].id!=a[i-].id)
{
as=;
memset(now1,,sizeof(now1));
memset(now2,,sizeof(now2));
r=t=a[i].id*d;
}
while(a[i].r>r)
{
r++;
now1[c[r]]=now1[c[r]+]+;
now2[c[r]]=now2[c[r]-]+;
int tt=now1[c[r]]+now2[c[r]]-;
now2[c[r]+now1[c[r]]-]=tt;
now1[c[r]-now2[c[r]]+]=tt;
as=max(as,tt);
}
int tmp=as;top=;
for(int j=a[i].l;j<=min(a[i].r,t);j++)
{
now1[c[j]]=now1[c[j]+]+;
now2[c[j]]=now2[c[j]-]+;
int tt=now1[c[j]]+now2[c[j]]-;
int rr=c[j]+now1[c[j]]-;int ll=c[j]-now2[c[j]]+;
st1[++top]=rr;st2[top]=now2[rr];
st1[++top]=ll;st2[top]=now1[ll];
now2[rr]=tt;
now1[ll]=tt;
tmp=max(tmp,tt);
}
for(int j=top;j>=;j--)
{
if(j%==)now1[st1[j]]=st2[j];
else now2[st1[j]]=st2[j];
}
for(int j=a[i].l;j<=min(a[i].r,t);j++)
{
now1[c[j]]=now2[c[j]]=;
}
ans[a[i].yuan]=tmp;
}
for(int i=;i<=m;i++)printf("%d\n",ans[i]);
return ;
}

最新文章

  1. Java中正则Matcher类的matches()、lookAt()和find()的区别
  2. JetS3t使用说明
  3. STL_关联容器 VS C++ hashmap
  4. 新Android学习计划
  5. MySql事务无法回滚的原因
  6. 读书笔记-《Maven实战》-关于Maven依赖传递的思考 2018/4/26
  7. Python--day08(文件操作)
  8. sessionStorage:写入记事本功能[内容写入sessionStorage中,读取,删除]
  9. Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别
  10. lr_场景设计之知识点-集合点、loadgenerator
  11. 【双目备课】OpenCV例程_stereo_calib.cpp解析
  12. MYSQL分组合并函数
  13. Cocos2d-js 3.0 颜色变换(调整sprite/图片的色调)
  14. script全局变量
  15. 20155239 2017-11-19 实现mypwd(选做,加分)
  16. vue.js(三)
  17. Crash for small compressed texture on some Android device
  18. Openstack Havana的两个排错过程
  19. Xamarin.Forms随手记
  20. 成员变量和属性区别(@property那点事儿)

热门文章

  1. exec命令详解
  2. linux安装nginx并配置负载均衡
  3. JS以及CSS对页面的阻塞
  4. Oracle purge 用法介绍
  5. mybatis之模糊查询SQL
  6. JS学习:JavaScript的核心
  7. 关于char存储值表示
  8. JAVA之路(二)
  9. lintcode-517-丑数
  10. STM32F103 CAN中断发送功能的再次讨论