首页 > 其他分享 >【NKOJ】仰望

【NKOJ】仰望

时间:2024-09-22 08:52:54浏览次数:8  
标签:10 int 仰望 NKOJ 样例 ans 奶牛 输入

目录

1.题目

问题描述

输入格式

输出格式

样例输入 1

样例输出 1

样例输入 2

样例输出 2

题目大意

2.分析

TLE代码

3.AC代码

1.题目

问题描述

约翰的N(1≤N≤10^5)头奶牛站成一排,奶牛i的身高是Hi(l≤Hi≤1,000,000).现在,每只奶牛都在向右看齐.对于奶牛i,如果奶牛j满足i<j且Hi<Hj,我们可以说奶牛i可以仰望奶牛j.    
求出每只奶牛离她最近的仰望对象.

输入格式

第1行输入N,之后每行输入一个身高.

输出格式

共N行,按顺序每行输出一只奶牛的最近仰望对象.如果没有仰望对象,输出0.

样例输入 1

6
3
2
6
1
1
2

样例输出 1

3
3
0
6
6
0

样例输入 2

10
1
13
13
14
7
9
3
9
3
15

样例输出 2

2
4
4
10
6
10
8
10
10
0

题目大意

其实可以把本体看成就求序列中每一个在其右边的第一个比它大的值,就是向右找寻第一个比他本身大的值,并且储存下来,没找到则得0。

2.分析

当我第一次看到这题的时候,第一个想到的就是用双重循环来做,我自信满满的写下了代码,嗯,然后我TLE了…………

TLE代码

#include<bits/stdc++.h>
using namespace std;
int n,i,j;
int a[100010];
int ans[100010];
int main()
{
    cin>>n;
    for(i=1;i<=n;i++)
	{
		cin>>a[i];
	}
    for(i=1;i<=n;i++)
    {
        for(j=i;j<=n;j++)
        {
            if(a[i]<a[j])
            {
                ans[i]=j;
                break;
            }
        }
    }
    for(i=1;i<=n;i++)
	{
		cout<<ans[i]<<endl;
	}
    return 0;
}

暴力枚举见祖宗,十年OI一场空。

所以我们要用一些技巧

这道题原本灰常简单,只是需要考虑如何优化时间,那么就只有在处理数据的时候下功夫了,其实就有点像是递推的思维,就是要在比对的时候,采用一个跳跃的思维,就好比如有这样一组数据:3 2 6 1 1 2,那么选取其中的6,那么6就要和它右边的1进行比较,因为6>1,所以这个时候,就把1的仰望对象与6进行对比,这样就可以节省在2的仰望对象与2之间的这些数据的比较了,从而达到优化的效果。然后经过递推一点点推回来,我采用的是倒序的方法。

int j=0;                                                                                                                                       
	for(int i=n-1;i>=1;i--)
	{
		j=i+1;
		while(a[i]>=a[j]&&a[j]>0)
		{
			j=ans[j];
		}
		ans[i]=j;
	}

3.AC代码

#include<bits/stdc++.h>
using namespace std;
int n;                                                                                                                                                        
int a[100010];
int ans[100010];
int main()                                                                                                                                      
{                                                                                                                                         
	scanf("%d",&n);                                                          
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	int j=0;                                                                                                                                       
	for(int i=n-1;i>=1;i--)
	{
		j=i+1;
		while(a[i]>=a[j]&&a[j]>0)
		{
			j=ans[j];
		}
		ans[i]=j;
	}
	for(int i=1;i<=n;i++)                                                                                                    
	{
		printf("%d\n",ans[i]);
	}
	return 0;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
}

//完结撒花!

标签:10,int,仰望,NKOJ,样例,ans,奶牛,输入
From: https://blog.csdn.net/2402_83602026/article/details/142367809

相关文章

  • 若是现实让你低头,那就在二次元中仰望星空
    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`若是现实让你低头,那就在二次元中仰望星空日期:2017-8-2阿珏二次元浏览:3535次评论:2条若是现实让你低头,那就在二次元中仰望星空。......
  • Solo 开发者周刊 (第10期):Sora 之后,谁是被遗忘的?谁又是被仰望的?
    这里会整合Solo社区每周推广内容、产品模块或活动投稿,每周五发布。在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解。本杂志开源,欢迎投稿。好文推荐Solo社区x机器之心-再谈复现Sora:被仰望与被遗忘的Sora给整个AI领域带来的最大......
  • 题解 NKOJ2929 【[THUSC2014] 函数求解】
    代码:#include<iostream>#include<queue>#include<cstdio>#include<cmath>usingnamespacestd;typedefstruct{ intnxt; intend; intdis; doublecost;}Edge;constintN=2e3,M=400+7,K=80800+7;constdoubleep......
  • NKOJ 2040
    我先说一下我自己的想法,我觉得是对的,但是没有OJ验证不了我们考虑第一种颜色的棋子,先放他,假设放完后,这种棋子占用了\(p\)行\(q\)列(任意的\(p\)行\(q\)列,显然不影响答案),则这\(p\)行\(q\)列就不能放其他棋子了,棋盘就剩下了\(n-p\)行\(m-q\)列如果我们已经知道了剩下所有棋子放在\(n......
  • [NKOJP6453]求和
    求\(\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}\mu(\gcd(i,j))^2\)。枚举\(\gcd\),\(\sum\limits_{d=1}^N\mu(d)^2\sum\limits_{i=1}^{\lfloor\fracNd\rfloor}\sum\limits_{j=1}^{\lfloor\fracMd\rfloor}[\gcd(i,j)=1]\)套莫反式子,\(\sum\li......
  • NKOJ 装备强化
    等概率双边游走有点类似赌徒输光问题,\(a+b=n\)时的期望。\(f_i\)表示从\(i-1\)第一次到\(i\)的期望次数-byLWC答案:\(\sum_{i=1}^nf_i\)\(f_i=(\frac{1}{p}-1)f_{i-1}+\frac{1}{p}-1+1\)令\(k=\frac{1}{p}\),\(f_i=k\timesf_{i-1}......
  • NKOJ2180证明
    这是一个经典模板,先看老板的PPT但其实我个人觉得从冒泡排序理解是不好理解的这个问题的本质还是证明这种做法是正确的首先,逆序对个数是下限,因为交换一次相邻两个数,通过对这两个数的相对大小的讨论,会发现最多让逆序对个数减少一然后我们要找到一种合理的方法来达到这个下限,就......
  • P5108 仰望半月的夜空
    Day\(\mathbbP_1^2+\mathbbP_2^2+\mathbbP_3^2\)。不考虑左端点最小,如何求出一个字典序最小子串,只需要建出后缀数组后找最小的\(i\)满足\(n-\text{sa}_i+1\geL\),然后取\(S[\text{sa}_i,\text{sa}_i+L-1]\)即可。现在的问题在于可能存在一个\(j>i\)使得\(S[\tex......
  • NKOJ9669小凯的疑惑—证明
    小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小凯想知道:1.在无......
  • 身陷泥潭,仰望星空 | 桃月拾伍日记
    慢慢地开始思考上大学到底是为了什么,其实我一直觉得——或者说我一直想做的——就是学些技术提升能力,基础学科什么的,其实我一直不是很在意的。可是接触了很多人(特别是学长......