http://acm.fzu.edu.cn/problem.php?pid=2226

信心题,还说是信心题,题目给的真好。但是一点都不像信心题。

又是一个新的算法,莫队算法

莫队算法是一个用数组就可以轻易实现的神奇数据结构,可以处理一类无修改的离线区间查询问题(PS:暂时还没有遇到莫队解决更新区间查询的问题)

  莫队算法可以在O(1),实现[l, r]到[l, r±1] / [l±1, r]的转移,然后我们就可以对所有查询分sqrt(n)块,把每个查询所在的块号当做第一关键字,右端点作为第二关键字升序排列。

  然后进行状态转移即可。

  时间复杂度O(n*sqrt(n)):当i与i+1在同一个块内,则L最多移动sqrt(n),R最多移动n,所以复杂度为O(n*sqrt(n)).

              当i与i+1不在同一块内,则L最多移动2*sqrt(n),R最多移动n,复杂度为O(n*sqrt(n)).

                                                        ------罗茜

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<vector> using namespace std;
#define N 1001 #define memset(a,b) memset(a,b,sizeof(a))
vector<int>G[N]; struct node
{
int l,r,id;
}Q[N*];
int n,q,l[N],r[N],ans[N*];
int a[N*]; int cmp(node c,node d)
{
if(c.l!=d.l)
return c.l<d.l;
else
return c.r<d.r;
} void solve()
{
int L=,R=;
for(int i=;i<=q;i++)
{
while(Q[i].l<L)
{
L--;
l[a[L]]--;
}
while(Q[i].l>L)
{
l[a[L]]++;
L++;
}
while(Q[i].r<R)
{
r[a[R]]--;
R--;
}
while(Q[i].r>R)
{
R++;
r[a[R]]++;
} int Max=;
for(int j=;j<=;j++)
{
if(r[j]<=)
continue;
int u=G[j][r[j]];
int v=G[j][l[j]+];
Max=max(Max,G[j][r[j]]-G[j][l[j]+]); }
ans[Q[i].id]=Max;
}
} int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=;i<=;i++)
G[i].clear();
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
G[a[i]].push_back(i);
} memset(l,-);
memset(r,-); scanf("%d",&q);
for(int i=;i<=q;i++)
{
scanf("%d %d",&Q[i].l,&Q[i].r);
Q[i].id=i;
}
sort(Q+,Q++q,cmp); solve(); for(int i=;i<=q;i++)
{
printf("%d\n",ans[i]);
}
}
return ;
} /*
5
1 1 1 1 1
3
1 5
3 3
2 5 */

信心题--FUOJ2226(莫队算法)的更多相关文章

  1. 【Luogu】P3709大爷的字符串题(莫队算法)

    题目链接 语文题啊…… 看题解发现是让求区间中最多的数的个数,于是果断理解了一会题解……莫队套上完事. sum[i]表示i这个数出现的次数,cnt[i]表示出现i次的数有几个,然后乱搞搞……就好了 # ...

  2. HDU 6278 - Just h-index - [莫队算法+树状数组+二分][2018JSCPC江苏省赛C题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6278 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  3. 【BZOJ3781、2038】莫队算法2水题

    [BZOJ3781]小B的询问 题意:有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数 ...

  4. [Bzoj2039]小Z的袜子 (莫队算法模板题)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 11866  Solved: 5318[Sub ...

  5. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 9894  Solved: 4561[Subm ...

  6. BZOJ 2038 小Z的袜子(hose) 莫队算法模板题

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题目大意: 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中 ...

  7. NBUT 1457 莫队算法 离散化

    Sona Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Submit Status Practice NBUT 145 ...

  8. 【BZOJ-3052】糖果公园 树上带修莫队算法

    3052: [wc2013]糖果公园 Time Limit: 200 Sec  Memory Limit: 512 MBSubmit: 883  Solved: 419[Submit][Status] ...

  9. NBUT 1457 Sona(莫队算法+离散化)

    [1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...

随机推荐

  1. 安装 python psutil 包

    yum install python-pip 下载 psutil https://pypi.python.org/pypi?:action=display&name=psutil#downlo ...

  2. Oracle中获取当前时间半小时前的时间

    最近项目中有个要根据半个小时前的数据情况判断某一栏位的值,但是一直没想到怎样获取当前时间的半小时前的时间,今天突然想到可以通过sysdate做差来获取,比如sysdate-1这样的,刚开始没有对结果进 ...

  3. linux 查询目录下包含关键字的所有文件

    linux查找目录下的所有文件中是否含有某个字符串 查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有 ...

  4. Android Menu 主菜单是使用

    在Android里面每个Activity都绑定了一个Menu(菜单)有些时候我们需要使用到菜单.用法很简单,我们只需要重写onCreateOptionsMenu和onOptionsItemSelect ...

  5. CGContextRef 绘图

    如何绘制一个矩形 添加一个属性 @property(nonatomic,strong) NSString* RectNumber; 1. 首先重写UIview的drawRect方法 - (void)d ...

  6. javascript立即执行函数 (function(){})()

    看到一段代码: (function(){ var outer = $('#subject'); outer.find('li').on('mouseover', mouseover); })() ( ...

  7. [js]识别浏览器及版本

    var userAgent = navigator.userAgent.toLowerCase();window.jQuery.browser = {    version: (userAgent.m ...

  8. PIC32MZ tutorial -- Timer Interrupt

    An interrupt is an internal or external event that requires quick attention from the controller. The ...

  9. js图片变换

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. PYTHON入门知识

    基本数据类型 注:查看对象相关成员 var,type,dir 一.整数 如: 18.73.84 每一个整数都具备如下功能: class int(object): """ ...