51nod 1272 最大距离

题目来源: Codility

基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题

 收藏

 关注

给出一个长度为N的整数数组A,对于每一个数组元素,如果他后面存在大于等于该元素的数,则这两个数可以组成一对。每个元素和自己也可以组成一对。例如:{5, 3, 6, 3, 4, 2},可以组成11对,如下(数字为下标):

(0,0), (0, 2), (1, 1), (1, 2), (1, 3), (1, 4), (2, 2), (3, 3), (3, 4), (4, 4), (5, 5)。其中(1, 4)是距离最大的一对,距离为3。

Input

第1行:1个数N,表示数组的长度(2 <= N <= 50000)。
第2 - N + 1行:每行1个数,对应数组元素Ai(1 <= Ai <= 10^9)。

Output

输出最大距离。

Input示例

6
5
3
6
3
4
2

Output示例

3

贪心

屠龙宝刀点击就送

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
    int hao,shu;
}dian[60000];
bool cmp(node xx,node yy)
{
    if (xx.shu!=yy.shu)
    return xx.shu<yy.shu;
    return xx.hao<yy.hao;
}
int main()
{
    int n;scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        scanf("%d",&dian[i].shu);
        dian[i].hao=i;
    }
    sort(dian,dian+n,cmp);
    int ans=0,mi=dian[0].hao;
    for (int i=1;i<n;i++)
    {
        if (dian[i].hao>mi) ans=max(ans,dian[i].hao-mi);
        else mi=dian[i].hao;
    }
    printf("%d\n",ans);
    return 0;
}  
时间: 2024-08-27 03:51:51

51nod 1272 最大距离的相关文章

51Nod 1272最大距离 (树状数组维护前缀最小值)

题目链接 最大距离 其实主流解法应该是单调栈--我用了树状数组. 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define rep(i, a, b) for (int i(a); i <= (b); ++i) 6 7 const int N = 100010; 8 9 struct node{ 10 int x, y; 11 friend bool operator < (const node &a, c

51nod 1272 思维/线段树

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1272 1272 最大距离 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 给出一个长度为N的整数数组A,对于每一个数组元素,如果他后面存在大于等于该元素的数,则这两个数可以组成一对.每个元素和自己也可以组成一对.例如:{5, 3, 6, 3, 4, 2},可以组成11对,如下(数字为下标):

51nod 1268最大距离

1272 最大距离  题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 给出一个长度为N的整数数组A,对于每一个数组元素,如果他后面存在大于等于该元素的数,则这两个数可以组成一对.每个元素和自己也可以组成一对.例如:{5, 3, 6, 3, 4, 2},可以组成11对,如下(数字为下标): (0,0), (0, 2), (1, 1), (1, 2), (1, 3), (1, 4), (2, 2), (3, 3), (

1272 最大距离 只想到了dp

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1272 离散化后,用dp[i]表示向右,大于等于i这个数字的最大位置 dp[i] = max(dp[i + 1], dp[i]) #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #in

模板题+进阶

模板题:2500 后面第一个大于 一般要正着看不出来,反着想,有的人也叫做正难则反. 有思维的一道题:1279 扔盘子 暴力会TLE 数据有点水,反着写的可以拿95% 1 //垃圾数据从井底倒着网上数盘子居然能过19个测试点 2 //但是提供给我们一种思路就是,明知道正着肯定会错时逆向解题也许能拿更多的分 3 #include<bits/stdc++.h> 4 using namespace std; 5 const int maxN=50005; 6 int n, m; 7 int w[ma

[51NOD1272]最大距离(贪心)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1272 思路:排序后由于序列都是顺序的,则只需要考虑序号了,加入当前维护的序号比后面的小,则更新ret.否则更新当前序号 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <

51nod水题记

妈呀51nod已经刷不动了又开始跟bzoj一样总是得看题解了...那么发一下总结吧... 1051:最大子矩阵 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t

51nod 1102 面积最大的矩形(单调栈)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 题意: 思路: 做法就是求出每个长方形向左向右所能延伸的最大距离. 我这里用单调栈来做,维护一个单调递增的栈(自底向上递增),如果当前值大于栈顶,那么直接进栈,如果小于的话,那就说明前面比它大的那些数最多只能延伸到它这里.自己手动模拟一下就可以了. 1 #include<iostream> 2 #include<algorithm> 3 #inclu

51nod 1378 夹克老爷的愤怒(树型dp+贪心)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1378 题意: 思路:要想放得少,尽量放在叶子节点处,叶子节点处点比较多. 从叶子节点开始往上回溯,到第k个点时就放置一名家丁,用dp[x]来记录状态,若为负,则表示该节点及其子树所需要家丁的最远距离,若为正,则表示该节点及其子树中家丁还能镇压的最大距离. 1 #include<cstdio> 2 #include<cstring> 3 #include&l