17-比赛1 F - 较小元素

Posted darkboy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17-比赛1 F - 较小元素相关的知识,希望对你有一定的参考价值。

Seg-El has last chance to make the final changes in order to prevent the destruction of Krypton.

He is provided an array Arr[ ] of N elements.

For each element Arr [ i ], he needs to find the largest element Arr [ j ] where j < i and Arr [ j ] < Arr [ i ]

Help him to achieve this task.

 

Input

First line comprises N- the number of elements in the array.

Second line contains N space separated integers denoting the elements of the array.

 

Output

Print N lines denoting the required answer as specified above. In case no such value exists for some

Arr [ i ], print "-1" (without quotes).

 

Constraints

  • 1 ≤ N ≤ 200000
  • 1 ≤ Arr [ i ] ≤ 1015

 

Example


1 2 3 5 4 

Output:

-1 



通过 set 或 map 就可轻松解决;

1.学长的代码

 1 /*
从前往后遍历数组,维护一个setset,对于数组的当前元素acurrentacurrent,使用setset的lower_boundlower_bound函数查找
setset里面满足≥acurrent≥acurrent的元素里的最小元素,再把acurrentacurrent插入setset里面就行了。
2 但是题目问的是当前元素前面的元素里满足<acurrent<acurrent的元素里的最大元素。 3 怎么办? 4 首先把数组里的每个元素取个相反数就行了。
*/
5 # include <bits/stdc++.h> 6 using namespace std; 7 set<long long> s; 8 int main () 9 { 10 int n; 11 long long x; 12 scanf("%d", &n); 13 for (int i = 1; i <= n; ++i) { 14 scanf("%lld", &x); 15 x = -x; 16 auto iter = s.lower_bound(x + 1); 17 if (iter == s.end()) puts("-1"); 18 else printf("%lld ", -*iter); 19 s.insert(x); 20 } 21 return 0; 22 }

 

2 . 一开始不会使用set ,用map自己做的

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     map<long long,int> imap;
 6     long long t;
 7     int n;
 8     cin>>n;
 9     for(int i =1;i<=n;i++)
10     {
11         scanf("%lld",&t);
12         t = -t;
13         //map<long long,int>::iterator it;
14         auto it = imap.lower_bound(t+1);
15         if(it == imap.end()) cout<<"-1"<<endl;
16         else
17            cout<<-(it->first)<<endl;
18         imap[t] = i;
19     }
20     return 0;
21 }

 









以上是关于17-比赛1 F - 较小元素的主要内容,如果未能解决你的问题,请参考以下文章

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

算法:树形选择排序

如何从 Android 中的 Fragment 访问 UI 元素?

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。 已抽签决定比赛名单。有人向队员打听比赛的名单。 a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。(代码片段

OCAC暑期比赛第一场 F题 字符串加密 题解

UVA12034比赛名次