P3368-Frequent values【线段树】

正题

链接:http://poj.org/problem?id=3368


大意

给出一个不下降序列,求一个区域内最多相同的数的出现次数。


解题思路

线段树
用left表示左边的连续个数,right表示右边的连续个数,maxs表示最长的连续个数,然后比较。

如果左边的所有数都等于右边最左的数则:
tree[k].left=tree[k2].right+tree[k2+1].lefttree[k].left=tree[k∗2].right+tree[k∗2+1].left

如果右边的所有数都等于左边最右的数则:
tree[k].right=tree[k2].right+tree[k2+1].lefttree[k].right=tree[k∗2].right+tree[k∗2+1].left

如果左边最右边的数等于右边最左边的数则最优解在中间:

tree[k].maxs=max(tree[k2].maxs,tree[k2+1].maxs,tree[k2].right+tree[k2+1].left)tree[k].maxs=max(tree[k∗2].maxs,tree[k∗2+1].maxs,tree[k∗2].right+tree[k∗2+1].left)

然后用类似方法推区间


代码

#include<cstdio>
#include<iostream>
using namespace std;
struct treenode{int l,r,maxs,left,right;
}tree[400001];
int n,m,x,y,num[100001];
char c;
void build(int k,int a,int b)//建树
{tree[k].l=a;tree[k].r=b;if (a==b) {tree[k].left=1;tree[k].right=1;tree[k].maxs=1;return;}int wz=(a+b)/2;build(k*2,a,wz);build(k*2+1,wz+1,b);if (tree[k*2].left==wz-a+1&&num[wz]==num[wz+1]) tree[k].left=tree[k*2].right+tree[k*2+1].left;elsetree[k].left=tree[k*2].left;if (tree[k*2+1].right==b-wz&&num[wz]==num[wz+1]) tree[k].right=tree[k*2].right+tree[k*2+1].left;elsetree[k].right=tree[k*2+1].right;if (num[wz]==num[wz+1]) tree[k].maxs=max(max(tree[k*2].maxs,tree[k*2+1].maxs),tree[k*2].right+tree[k*2+1].left);elsetree[k].maxs=max(tree[k*2].maxs,tree[k*2+1].maxs);
//统计
}
int find(int k,int a,int b)
{if (tree[k].l>b||tree[k].r<a||tree[k].r<tree[k].l) return 0;if (tree[k].r<=b && tree[k].l>=a) return tree[k].maxs;int wz=(tree[k].r+tree[k].l)/2,m=1,m1=1,m2=1;if (num[wz]==num[wz+1])m=min(wz-a+1,tree[k*2].right)+min(b-wz,tree[k*2+1].left);//中间最优解if (a<=wz)m1=find(k*2,a,b);//左边最优解if (b>wz)m2=find(k*2+1,a,b);//右边最优解m=max(m,max(m1,m2));//全部的最优解return m;
}
int main()
{while(scanf("%d",&n)){if (n==0) break;scanf("%d",&m);for (int i=1;i<=n;i++)scanf("%d",&num[i]);memset(tree,0,sizeof(tree));build(1,1,n);for (int i=1;i<=m;i++){scanf("%d%d",&x,&y);printf("%d\n",find(1,x,y));}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DDD理论学习系列(12)-- 仓储

1. 引言 DDD中Repository这个单词&#xff0c;主要有两种翻译&#xff1a;资源库和仓储&#xff0c;本文取仓储之译。 说到仓储&#xff0c;我们肯定就想到了仓库&#xff0c;仓库一般用来存放货物&#xff0c;而仓库一般由仓库管理员来管理。当工厂生产了一批货物时&#xf…

Windows 通过 SecureCRT 8.x 上传文件到Linux服务器

转载自 Windows 通过 SecureCRT 8.x 上传文件到Linux服务器 1、SecureCRT 连接 Linux 服务器&#xff0c;这一步操作简单&#xff1a; 2、连接并登录成功后&#xff0c;直接在连接成功的页签上 右键 -> Connect SFTP Session 打开SFTP窗口&#xff1a; 3、在新的SFTP页签…

没有回家的等于没过年

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。今天是农历2021年正月初二&#xff0c;新的一年&#xff0c;祝大家牛年大吉&#xff0c;身体健康&#xff0c;万事如意&#xff01;今年由于各方面原因并未回家过年&#xff0c;感觉没回家等于没过年&a…

P2774-方格取数问题【网络流,最大流,最小割】

正题 链接&#xff1a; https://www.luogu.org/problemnew/show/P2774 题意 在一个n*m的数字矩阵中取数&#xff0c;取得数不能相邻&#xff0c;求能取到的最大价值。 解题思路 最大价值&#xff0c;那么反着去想&#xff0c;就是取若干个格子&#xff0c;让所有格子的都不…

.NET Core引入性能分析引导优化

“性能分析引导优化&#xff08;Profile Guided Optimization&#xff0c;缩写PGO&#xff09;”是一项原生编译技术&#xff0c;可用于生成高度优化的代码。它通过一个两步编译过程实现优化——用第一步记录相关执行信息&#xff0c;然后第二步用那些信息构建一个改进过的二进…

Linux查找含有某字符串的所有文件

转载自 Linux查找含有某字符串的所有文件 1、grep查找 grep -rl "hello,world!" * * : 表示当前目录所有文件&#xff0c;也可以是某个文件名 -r 是递归查找 -n 是显示行号 -R 查找所有文件包含子目录 -i 忽略大小写 下面是一些有意思的命令行参数&#xff…

手把手教你搭建Maven项目

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。今天给大家分享的是“手把手教你买基金”&#xff0c;奥&#xff01;&#xff01;不对&#xff0c;不好意思&#xff0c;是“手把手教你使用idea搭建Maven项目”&#xff01;前言大家都知道&#x…

P1306-斐波那契公约数【矩阵乘法,数论】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P1306 题目大意 求出第x项和第y项斐波那契额数的最大公约数。 解题思路 首先第x项和第y项斐波那契额数的最大公约数就是第gcd(x,y)项斐波那契额数。 但是样例还是很大&#xff0c;于是就得用矩阵乘法加速…

实例!使用Idea创建SSM框架的Maven项目

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。前言书接前文&#xff0c;昨天带着大家下载且配置了maven&#xff0c;以及在idea中创建maven项目&#xff0c;今天&#xff0c;我们就结合ssm框架&#xff0c;在idea中实现一个增删改查案例。昨天的…

Spring MVC的GET与POST请求url-pattern坑

一、坑现象复现 1、web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://java.sun.com/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://java.sun…

P1801-黑匣子_NOI导刊2010提高【堆】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P1801 大意 有两种操作&#xff0c; 1.将一个数放入黑匣子中 2.i之后查询第i小的数&#xff08;初始为i&#xff09; 解题思路 维护两个堆&#xff0c;一个是比第i小的数大的数的最小堆&#xff0c;一个…

如何给你的Idea换一个好看漂亮的主题

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。前言大家都知道&#xff0c;idea里面自带两种主题样式&#xff0c;一种是灰色的&#xff0c;另一种是黑色的。你有没有想过换个其他的主题颜色用用呢&#xff1f;如果想&#xff0c;那么今天&#…

腾讯游戏使用Microsoft Service Fabric案例

本文转载自公众号-云就该这么玩&#xff0c;微软官方的地址链接&#xff1a;https://customers.microsoft.com/en-us/story/tencent-telecommunications-azure-service-fabric-windows-server-en 根据研究公司Newzoo的报告估计&#xff0c;全球游戏收入在2017年将达到1080亿美…

div中的table内容过多时不超出div的范围解决方法

转载自 div中的table内容过多时不超出div的范围解决方法 问题描述&#xff1a; 在做界面展示时&#xff0c;table的内容过多&#xff0c;超出div的大小&#xff0c;看着table的边框盖过了div的边框&#xff0c;不美观。 问题解决&#xff1a; 因为页面整体的布局美工都设计…

P2278-[HNOI2003]操作系统【堆】

正题 题目链接&#xff1a; https://www.luogu.org/problemnew/show/P2278 题意 有若干个进程&#xff0c;每个进程有优先级&#xff0c;运行时间&#xff0c;放入时间。 如果一个进程到达的时候CPU是空闲的&#xff0c;则它会一直占用CPU直到该进程结束。除非在这个过程中…

属性编辑器未在PropertyEditorManager中注册?

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号【雄雄的小课堂】。前言好不容易将代码都写完了&#xff0c;结果一运行&#xff0c;报错&#xff01;&#xff01;HTTP Status 500 - Unable to convert string "${book.btime}" to class "java.util.…