Frequent values

UVA - 11235

题目传送门

题目大意:给出一个非降序的整数数组a1,a2,a3...an,你的任务是对一系列的询问(i,j),回答ai,ai+1,ai+2...aj中出现次数最多的值所出现的次数。输入包括多组数据。每组数据第一行为两个整数n和q(1<=n,q<=100000)。第二行包含n个非降序排列的整数a1,a2,a3...an(-100000<=ai<=100000),以下q行每行包括两个整数i和j(1<=i<=j<=n),输入以0结束。

解决方法:用value[i]和Count[i]分别表示第i段的数值和出现的次数,num[p],Left[p],Right[p]分别表示位置p所在段的编号和左右端点的位置,所以(i,j)的答案就是取Right[i]-i+1,j-Left[j]+1,query(1,t,1,num[i]+1,num[j]-1)的最大值。

AC代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
int arr[maxn];
int maxl[maxn];
int value[maxn];
int Count[maxn];
int Left[maxn];
int Right[maxn];
int num[maxn];
void pushup(int x)
{maxl[x]=max(maxl[x<<1],maxl[x<<1|1]);
}
void build(int l,int r,int x)
{if(l==r){maxl[x]=Count[l];return ;}int mid=(l+r)>>1;build(l,mid,x<<1);build(mid+1,r,x<<1|1);pushup(x);
}
int query(int l,int r,int x,int L,int R)
{int ans=0;if(L<=l&&r<=R)return maxl[x];int mid=(l+r)>>1;if(L<=mid)ans=max(ans,query(l,mid,x<<1,L,R));if(R>mid)ans=max(ans,query(mid+1,r,x<<1|1,L,R));return ans;
}
int main()
{#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);#endif//freopen("out.txt", "w", stdout);ios::sync_with_stdio(0),cin.tie(0);int n,m;while(cin>>n&&n){cin>>m;ms(maxl);ms(arr);ms(value);ms(Count);ms(num);ms(Left);ms(Right);int t=0;int l1=1,r1=n;rep(i,1,n) {cin>>arr[i];if(arr[i]!=arr[i-1]||i==1){t++;if(i!=1)l1=i;}num[i]=t;Count[t]++;value[t]=arr[i];Left[i]=l1;}lep(i,n,1) {Right[i]=r1;if(arr[i]!=arr[i-1])r1=i-1;}build(1,t,1);while(m--){int a,b;cin>>a>>b;if(a==b)cout<<1<<endl;else {int ans=0;ans=query(1,t,1,num[a]+1,num[b]-1);int nape;if(Right[a]==Right[b])nape=b-a+1;elsenape=max(Right[a]-a+1,b-Left[b]+1);ans=max(ans,nape);cout<<ans<<endl;}}}return 0;
}

Frequent values【线段树】相关推荐

  1. POJ 3368 Frequent values 线段树区间合并

    题意O(-1)不用解释.. 线段树结点维护三个信息:区间内相同的数出现最多的次数maxc.区间左边第一个数出现的次数lc.区间右边第一个数出现的次数rc. 分左区间右端点和右区间左端点相同于否的情况合 ...

  2. hdu 1806 Frequent values 线段树

    题目链接 给一个非递减数列, n个数, m个询问, 每个询问给出区间[L, R], 求这个区间里面出现次数最多的数的次数. 非递减数列, 这是最关键的一个条件... 需要保存一个区间最左边的数, 最右 ...

  3. 【线段树】FREQUENT - Frequent values(luogu-SP1684 / poj 3368)

    FREQUENT - Frequent values luogu-SP1684 poj 3368 题目大意: 有一个单调不降序列,让你求出某些区间内的出现次数最多的数出现的次数(有多组数据,以0结尾) ...

  4. P3368-Frequent values【线段树】

    正题 链接:http://poj.org/problem?id=3368 大意 给出一个不下降序列,求一个区域内最多相同的数的出现次数. 解题思路 线段树 用left表示左边的连续个数,right表示 ...

  5. 线段树练习——区间合并

    这类题目会询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并(这里最难理解) hdu 3308 http://acm.hdu.edu.cn/showproblem.p ...

  6. 【POJ】2828 Buy Tickets(线段树+特殊的技巧/splay)

    http://poj.org/problem?id=2828 一开始敲了个splay,直接模拟. tle了.. 常数太大.. 好吧,说是用线段树.. 而且思想很拽.. (貌似很久以前写过貌似的,,) ...

  7. 【HDU 1542】Atlantis 矩形面积并(线段树,扫描法)

    [题目] Atlantis Problem Description There are several ancient Greek texts that contain descriptions of ...

  8. poj2823 线段树模板题 点修改(也可以用单调队列)

    这道题吧 没计算时间 因为给了那么多 一算还可以 就直接写了线段树,刘汝佳那本模板 然后!poj的g++比C++慢大约500ms.......g++tle,C++就过了 Sliding Window ...

  9. HDU-1698 JUST A HOOK 线段树

    最近刚学线段树,做了些经典题目来练手 Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...

最新文章

  1. hdu2824(2009多校第一场) 线性筛法求欧拉函数
  2. 计算机二级题31套资料,计算机等级考试:二级VFP机试第31套
  3. 计算机视觉开源库OpenCV形态学morphologyEx函数之开运算和闭运算
  4. 笔记本电脑怎么清理灰尘_笔记本电脑玩游戏发热怎么办?笔记本玩游戏发烫解决方法...
  5. oracle for循环
  6. 深入理解数据库核心技术
  7. 蓝桥杯 试题 基础练习 特殊回文数——16行代码AC
  8. IOS基础之毛毛虫案例-重力
  9. 【软件开发】制作个人移动式Git服务器
  10. “毕业1年,做Python挣了50W!”网友:吹得太少..
  11. 我的同学总结关于linux
  12. php 日志库,这可能是php世界中最好的日志库——monolog
  13. Fiddler的使用介绍及抓包分析(详解)
  14. excel因为文件格式或文件扩展名无效,请确定文件未损坏(Excel文件格式或文件扩展名无效)...
  15. Android多媒体开发框架
  16. php隐藏下载外链,教你如何去掉友荐和无觅的隐藏外链和版权链接
  17. ubuntu搭建PHP网站完整实例教程
  18. 《弃子长安》第三章 月下魅影
  19. 通知器(Notifier)
  20. 欧几里得扩展欧几里得算法

热门文章

  1. 8255数码管显示0到9_汇编语言--键盘扫描及显示实验(含代码解释)
  2. mac vscode 背景半透明_给 vscode 添加半透明毛玻璃效果
  3. zabbixdocker里的mysql_docker zabbix安装部署(数据库和web及zabbix服务都用docker版)
  4. mysql聚集索引 myisam_一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
  5. java 大数四则运算_大数四则运算java(转)
  6. c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...
  7. 自定义日历控android,Android 一个日历控件的实现小记
  8. 计算机专业好还是铁道运输管理好,铁道运输管理专业主要是干什么的?
  9. html 图片行内剧中,HTML入门(转义字符、行内样式和块级元素、定位、锚点、跑马灯标签、图片标签、表格标签的讲解)...
  10. C语言发展历史,C语言特点,C语言利于弊,入门须知三招