NOIP模拟测试29「爬山·学数数·七十和十七」

爬山题解不想写了

学数数

离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护

那么怎么找以每一个值为最大值的连续子段个数

方法1(我的极笨的方法)

考试时我的丑陋思路,

定义极左值为左面第一个大于当前值的值,极右值为右面第一个大于当前值的值

,找到最大值然后当前符合的子段个数就为$r-l+1+(r-now)*(now-l)$

解释一下$r-l+1$为以$now$为边界的子段,$(r-now)*(now-l)$为包含$now$的子段

那么问题又转化为了如何求边界

我们发现找极左值,极右值过程可以二分实现,

我们每次找到最大值,然后找到左右子段的最大值和$id$,这些子段的最大值边界就是当前$now$!!!!

维护最大值$id$可以线段树实现

给一下实现

简单好想个屁嘞

但是比较直观是真的

void pre(ll l,ll r,ll now,ll nowmax){if(l>r) return ;if(l==r) {sum[nowmax]++;return ;}sum[nowmax]+=r-l+1+(r-now)*(now-l);maxn=0,ida=0;if(l<=now-1){    seg_max(1,l,now-1);pre(l,now-1,ida,maxn);}maxn=0,ida=0;if(now+1<=r){seg_max(1,now+1,r);pre(now+1,r,ida,maxn);}
}

总代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 2222222
ll n,q,mx,mn=0x7fffffffff,ida,maxn,idb;
ll a[A],sum[A],b[A];
char c[10];
struct tree{ll l,r,val,id;
}tr[A];
void pushup(ll p){if(tr[p<<1].val>tr[p<<1|1].val){tr[p].val=tr[p<<1].val;tr[p].id=tr[p<<1].id;}else {tr[p].val=tr[p<<1|1].val;tr[p].id=tr[p<<1|1].id;}
}
void built(ll p,ll l,ll r){tr[p].l=l,tr[p].r=r;if(l==r){tr[p].val=a[l];tr[p].id=l;return ;}ll mid=(l+r)>>1;built(p<<1,l,mid);built(p<<1|1,mid+1,r);pushup(p);
}
void seg_max(ll p,ll l,ll r){
//    printf("p=%lld l=%lld r=%lld l=%lld r=%lld\n",p,l,r,tr[p].l,tr[p].r);if(tr[p].l>=l&&tr[p].r<=r){if(tr[p].val>maxn){maxn=tr[p].val;ida=tr[p].id;}return ;}ll mid=(tr[p].l+tr[p].r)>>1;if(mid>=l)seg_max(p<<1,l,r);if(mid<r)seg_max(p<<1|1,l,r);
}
void pre(ll l,ll r,ll now,ll nowmax){if(l>r) return ;if(l==r) {sum[nowmax]++;
//        printf("l=%lld nowmax=%lld \n",l,nowmax);return ;}
//    printf("l=%lld r=%lld nowmax=%lld r-l=%lld\n",l,r,nowmax,r-l+1);sum[nowmax]+=r-l+1+(r-now)*(now-l);maxn=0,ida=0;if(l<=now-1){    seg_max(1,l,now-1);pre(l,now-1,ida,maxn);}maxn=0,ida=0;if(now+1<=r){seg_max(1,now+1,r);pre(now+1,r,ida,maxn);}
}
int main(){scanf("%lld%lld",&n,&q);for(ll i=1;i<=n;i++){scanf("%lld",&a[i]);b[i]=a[i];if(a[i]>mx){ida=i;mx=a[i];    }mn=min(mn,a[i]);}sort(b+1,b+n+1);ll m=unique(b+1,b+n+1)-b-1;
//    for(ll i=1;i<=m;i++){
//        printf("b=%lld\n",b[i]);
//    }for(ll i=1;i<=n;i++)a[i]=lower_bound(b+1,b+1+m,a[i])-b;built(1,1,n);pre(1,n,ida,a[ida]);for(ll i=1;i<=n;i++)sum[i]+=sum[i-1];for(ll i=1,que;i<=q;i++){scanf("%s",c+1);scanf("%lld",&que);ll nxt=(lower_bound(b+1,b+m+1,que)-b),pre=(upper_bound(b+1,b+m+1,que))-b-1;
//        printf("pre=%lld nxt=%lld\n",pre,nxt);if(c[1]=='<'){if(que>mx){printf("%lld\n",sum[n]);continue ;}if(que<mn){printf("0\n");continue ;}if(pre!=nxt)printf("%lld\n",sum[pre]);else printf("%lld\n",sum[pre-1]);}else if(c[1]=='='){if(que>mx||que<mn){printf("0\n");continue ;}if(pre==nxt)printf("%lld\n",sum[pre]-sum[pre-1]);else printf("0\n");}else if(c[1]=='>'){if(que>mx){printf("0\n");continue ;}if(que<mn){printf("%lld\n",sum[n]);continue ;}if(pre==nxt)printf("%lld\n",sum[n]-sum[pre]);else printf("%lld\n",sum[n]-sum[pre]);}}
}
View Code

方法2

单调栈,显然可以单调栈,看到这个就必须想单调栈啊!

维护一个单调下降的栈当发现当前值比队尾小接着插,发现当前值不小$pop$,当前值的$l$就是$pop$后单调栈的栈顶,已经$pop$掉的值的$r$就是当前值

代码咕了

七十和十七

设$g[i]$为将相对大小为$i$的数插到队头要花多少步复原

注意是相对大小

以下说的1,2...都是相对大小

我们将$1$移到队头要$1$步复原,$g[1]=1$

将$2$移到队头你相对大小为$1$的也要复原$g[2]=g[1]+1$

将$3$移到队头你大小$1,2$也要复原$g[3]=g[2]+g[1]+1$

...类推

$g[n]=\sum\limits {i=1}^{i<=n-1}(g[i])+1$

然后我们设$f$为移动总步数

$f[i]=f[i-1](为1的情况)+\sum\limits_{j=1}^{j<=i-1} f[i-1]+(i-1)!*g[j]$

,最后再同时除以$i!$,为了方便我们设$E[i]=\frac{f[i]}{i!}$

原式变为$E[i]=E[i-1]+\frac{2^{i-1}-1}{i}$

我们化简移项等操作$xjb$搞就$AC$了

转载于:https://www.cnblogs.com/znsbc-13/p/11394716.html

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

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

相关文章

手机音频拼接软件_良心分享:业界最顶尖的软件!

01短视频的爆火&#xff0c;让全民都接触了“剪辑”要知道在最最最开始大众离它很远&#xff0c;更多是一种职业而非爱好最具影响力的是抖音、B站等平台抖音让更多人接触到了剪辑哔哩让更多人学会剪辑技术虽然抖音的视频时长普遍较短但这并不妨碍剪辑技术的展现比如&#xff0c…

java堆内存和堆外内存_Java堆空间,本机堆和内存问题

java堆内存和堆外内存最近&#xff0c;我正在和一个朋友讨论为什么Java进程使用的内存比启动Java进程时设置的最大堆多。 代码创建的所有Java对象都是在Java堆空间内创建的&#xff0c;其大小由-Xmx选项定义。 但是一个Java进程由很多空间组成&#xff0c;而不仅仅是Java堆空间…

springboot实践1

环境安装 安装jdk 推荐安装jkd1.8,我使用的是mac&#xff0c;假设已经安装好homebrew,则jdk的安装指令是&#xff1a; brew install java 在 ~/zshrc ,添加两行 export JAVA_HOME你的jdkPath export PATH$PATH:$JAVA_HOME;然后保存&#xff1b; 输入 echo ${JAVA_HOME} 回车&…

电脑入门基础教程_ARM入门最好的文章------转载一位资身工程师的入门心得

开始学ARM一团雾水,不知道如何入手.这个介绍的比较全面.本人认为aRM入门最好的文章1. 抓住51开发ARM这几个月来我一直都爬在51的问题&#xff0c;自己都有一点笑自己了&#xff0c;用了4个月的时间&#xff0c;来巩固51的原理和程序&#xff0c;还好我自己算是走过来了&#xf…

项目包装组织

程序包是Java的基本概念&#xff0c;是您开始用该语言编程时偶然发现的第一件事。 作为一个初学者&#xff0c;您可能不太在意软件包的结构&#xff0c;但是随着您成为经验丰富且成熟的软件开发人员&#xff0c;您开始思考可以采取哪些措施来提高其效率。 有几个主要选项需要考…

NOIP模拟测试30「return·one·magic」

magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i1}^{i<N} [gcd(i,N)1] C_{G}^{i} \%phi(p)}\%p$ 根据欧拉函数是积性的得出$phi(54184622)phi(2)*phi(27092311)$ 然后$phi(27092311)27092310$ $phi(2)1$所以$phi(541…

python作用域的理解-理解Python的UnboundLocalError(Python的作用域)

今天写代码碰到一个百思不得解为什么会出错的代码&#xff0c;简化如下&#xff1a; 1 2 3 4 5 6 7 x10 deffunc(): ifsomething_true(): x20 print(x) func() 意图很明显&#xff0c;首先我定义了一个全局的x&#xff0c;在函数中&#xff0c;如果有特殊需要&#xff0c;就重新…

threadlocals_如何使用ThreadLocals射击自己

threadlocals它将很好地启动。 像大多数故事一样。 您会发现一个新概念&#xff0c;并对其功能感到惊讶。 然后突然装备了这把新锤子&#xff0c;一切开始看起来像钉子。 根据我们过去几个月的经验&#xff0c; java.lang.ThreadLocal真是一锤定音。 我想这全都归结为ThreadLo…

ASP.NET Core Web API

1.简单介绍 ASP.NET Core Web API 是 ASP.NET Core MVC 的一个功能。ASP.NET Core MVC 包含了对 Web API 的支持。可以构建多种客户端的 HTTP 服务。ASP.NET Core Web API可用于在 .NET Core 上构建 RESTful 应用程序。 框架包含对 HTTP 内容协商的支持&#xff0c;内置支持以 …

win8配置_《FIFA 20》PC配置公布 最低仅需i3+GTX660

EA公布了新作《FIFA 20》的PC配置需求&#xff0c;玩家最低仅需 i3-2100 GTX 660 显卡即可进行游戏&#xff0c;推荐配置则为 i3-6300T GTX 670 显卡&#xff0c;考虑到本作的逼真画面效果&#xff0c;这配置可以说是非常亲民&#xff0c;另外硬盘空间需要大约 50 GB。最低配…

Thymeleaf + Spring中的验证

总览 我们将要讨论的重要主题涉及空值&#xff0c;空字符串和输入验证&#xff0c;因此我们不会在数据库中输入无效数据。 在处理空值时&#xff0c;我们使用了Java 1.8中引入的java.util.Optional 。 0 – Spring Boot Thymeleaf示例表单验证应用程序 我们正在为一所大学构…

技术管理规划-设定团队的职能

背景 职责 团队是干什么的 初步自查团队 1.公司为什么给我团队&#xff1f;希望我产出什么&#xff1f;完成对除了c端健康领域探索的研发任务&#xff0c;产出技术类产品 2.团队存在的独特价值是什么&#xff1f;研发过lx健康这款基础app,研发能力强&#xff0c;熟悉硬件相关技…

开发转测试没人要_前端开发,测试,后端,该如何选择?

一般来说前端会比后端简单一些的&#xff0c;初学者或者转行可能考虑前端多一点&#xff0c;但是后端开发的薪水又比前端高一些&#xff0c;就是比较枯燥。前端开发我目前一直在自学前端&#xff0c;从网上找资料&#xff0c;然后听课&#xff0c;只要是对编程有兴趣&#xff0…

技术管理规划-如何设定团队的目标

团队管理规划有4个互相关联的要素&#xff1a; 职能目标团队路径在未来的3个月&#xff0c;6个月&#xff0c;1年&#xff0c;2年&#xff0c;3年&#xff0c;5年中&#xff0c;你希望带着你的团队抵达一个什么样的目的地&#xff0c;也就是团队的目标。 更加清楚目标意味着什么…

a8处理器相当于骁龙几_天玑820相当于骁龙什么处理器?天梯图秒懂联发科天玑820性能排名...

5月18日&#xff0c;联发科发布了全新 天玑820处理器&#xff0c;号称目前最强中端芯&#xff0c;受到不少网友关注。联发科近年来在手机CPU市场沉寂多年&#xff0c;今年异常给力&#xff0c;先后发布了天玑1000/L、天玑800等多款处理器&#xff0c;采用了全新的命名方式&…

hibernate 继承_Hibernate继承:每个类层次结构的表

hibernate 继承在本教程中&#xff0c;我们将了解如何在hibernate中实现继承。可以通过3种方式在hibernate中实现继承。在本文中&#xff0c;我们将看到其中一种&#xff0c;即每个类层次结构一个表。 Hibernate中的继承&#xff1a; Java是面向对象的语言&#xff0c;继承是J…

vue - cli 脚手架安装

一、 node安装 1&#xff09;如果不确定自己是否安装了node,可以在命令行工具内执行&#xff1a; node -v &#xff08;检查一下 版本&#xff09;&#xff1b; 2&#xff09;如果 执行结果显示&#xff1a; xx 不是内部命令&#xff0c;说明你还没有安装node , node 安装地址…

python人工智能_人工智能福利丨Python核心语法实战

Python已正式跻身成熟语言行列&#xff0c;成为整个互联网的基础性语言之一&#xff0c;并以肉眼可见的速度&#xff0c;在全球攻城略地&#xff1a;——牢牢占据TIOBE世界编程语言排行榜第四名&#xff0c;且保持上升趋势——国家级人工智能四大平台确立——正式纳入全国计算机…

.NET Core 单元测试

应用程序测试的类型很多&#xff0c;包括集成测试&#xff0c;Web 测试&#xff0c;负载测试等。在最底层的是单元测试&#xff0c;此测试可以测试单个软件组件或方法。单元测试一般只测试开发人员的代码&#xff0c;不应该测试基础结构普、问题&#xff0c;如数据库&#xff0…

是什么原因导致OutOfMemoryError?

发生以下情况之一时&#xff0c;可能会引发OutOfMemoryError &#xff1a; JVM耗尽了本机内存 Java堆内存不足 PermGen或Metaspace内存不足 JVM花太多时间试图收集垃圾 通常可以从错误消息中OutOfMemoryError出OutOfMemoryError的根本原因。 让我们研究每种情况的细节。 …