S + T

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描写叙述

给你一个长度为n的整数序列A1。A2,……,An,找出两个整数Ai和Aj(i<j),使得Ai-Aj尽量大。

输入
输入第一行为数据组数T(T<=100)。

每组数据的第一行为整数的个数n(2<=n<=100000);一下n行。每行为一个绝对值不超过150000的正整数。

(全部的数据都不超过2^64 - 1)

输出
对于每组数据,输出Ai –Aj的最大值、i值和j值。(假设有多个最大值,则输出先出现的最大值和i,j值)
例子输入
  1. 235 2 162 3 6 2 1 -1
例子输出
  1. 4 1 37 3 6
提示
假设你觉得数据太大,则本OJ推荐使用long long
来源
算法入门
上传者

userid=ACM_%E9%92%9F%E8%AF%97%E4%BF%8A" style="color:rgb(55,119,188)">ACM_钟诗俊

刚開始用的结构体优先队列,结果发现wa了几次才发现,i>j...也就是说前面的数减去后面数的最大值。

想想还是把wa的贴出来吧。AC贪心策略是,先把数据用数组保存起来。然后for循环从0-n筛选最大值,保存起来,从n-0筛选最小值,保存起来。

最后再用一个for循环寻找差的最大值。详细看以下ac代码。

wa:

  1. #include <stdio.h>
  2. #include <queue>
  3. using namespace std;
  4. struct node
  5. {
  6. long long t,num;
  7. bool operator<(const node &a)const
  8. {
  9. if(num<a.num)
  10. return true;
  11. else if(num==a.num&&t<a.t)
  12. return true;
  13. else
  14. return false;
  15. }
  16. };
  17. priority_queue<node>s;
  18. int main()
  19. {
  20. long long ncase,mark1,mark2,sum,n,mark;
  21. node x,y1,y2,temp;
  22. scanf("%lld",&ncase);
  23. while(ncase--)
  24. {
  25. scanf("%lld",&n);
  26. for(int i=1;i<=n;i++)
  27. {
  28. scanf("%lld",&x.num);
  29. x.t=i;
  30. s.push(x);
  31. }
  32. y1=s.top();
  33. while(s.size()>1)
  34. {
  35. temp=s.top();
  36. if(temp.num!=y1.num)
  37. break;
  38. else
  39. mark=temp.t,s.pop();
  40. }
  41. while(s.size()>1)
  42. s.pop();
  43. y2=s.top(),s.pop();
  44. printf("%lld",y1.num-y2.num);
  45. if(y1.num!=y2.num)
  46. printf(" %lld %lld\n",mark,y2.t);
  47. else
  48. printf(" 1 2\n");
  49. }
  50. return 0;
  51. }

ac:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 100005
  4. long long num[N];
  5. struct node
  6. {
  7. long long max,t1,min,t2;
  8. }c[N];
  9. int main()
  10. {
  11. long long t,n,temp,mark1,mark2;
  12. scanf("%lld",&t);
  13. while(t--)
  14. {
  15. memset(num,0,sizeof(num));
  16. memset(&c,0,sizeof(&c));
  17. scanf("%lld",&n);
  18. temp=-150005;
  19. for(int i=0;i<n;i++)
  20. {
  21. scanf("%lld",&num[i]);
  22. if(temp<num[i])
  23. temp=num[i],mark1=i+1;
  24. c[i].max=temp;
  25. c[i].t1=mark1;
  26. }
  27. temp=150005;
  28. for(int i=n-1;i>=0;i--)
  29. {
  30. if(num[i]<=temp)
  31. temp=num[i],mark2=i+1;
  32. c[i].min=temp;
  33. c[i].t2=mark2;
  34. }
  35. temp=-150005*2;
  36. for(int i=0;i<n-1;i++)
  37. {
  38. if(temp<c[i].max-c[i+1].min)
  39. temp=c[i].max-c[i+1].min,mark1=c[i].t1,mark2=c[i+1].t2;
  40. }
  41. printf("%lld %lld %lld\n",temp,mark1,mark2);
  42. }
  43. return 0;
  44. }

nyoj847 S + T(贪心)的更多相关文章

  1. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  2. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  3. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  5. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  6. 【BZOJ-4245】OR-XOR 按位贪心

    4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 486  Solved: 266[Submit][Sta ...

  7. code vs 1098 均分纸牌(贪心)

    1098 均分纸牌 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解   题目描述 Description 有 N 堆纸牌 ...

  8. 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心

    SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了... 最小道路=已选取的奶牛/道路总数. #include <iostream> #include <cstdi ...

  9. 【贪心】HDU 1257

    HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...

随机推荐

  1. 27.prim算法  最优布线问题(wire.cpp)

    [例4-10].最优布线问题(wire.cpp) [问题描述] 学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来.两台计算机被连接是指它们间有数据线连接.由于计算机所处的位置不同,因此不 ...

  2. Codeforces Beta Round #9 (Div. 2 Only) E. Interesting Graph and Apples 构造题

    E. Interesting Graph and Apples 题目连接: http://www.codeforces.com/contest/9/problem/E Description Hexa ...

  3. Google Code Jam 2009 Qualification Round Problem A. Alien Language

    https://code.google.com/codejam/contest/90101/dashboard#s=p0 Problem After years of study, scientist ...

  4. hihocoder编程收割赛20

    hihocoder编程收割赛20 hihocoder1542 : 无根数变有根树 hihocoder1542 思路: 树的遍历 ac代码: // hihocompete20_01.cpp : 定义控制 ...

  5. SPOJ 7001. Visible Lattice Points (莫比乌斯反演)

    7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N lattice. One corner is at (0,0, ...

  6. 【MongoDB】windows下搭建Mongo主(Master)/从(slave)数据库同步

    在前面一系列的文章中.我们讲述了mongodb的基本操作,高级查询以及索引的使用. 该篇博客主要说明在windows系统怎样创建主从数据库同步: 须要启动两个mongoDb文档数据库,一个是主模式启动 ...

  7. C#编程兵书

    <C#编程兵书> 基本信息 作者: 张志强 胡君 丛书名: 程序员藏经阁 出版社:电子工业出版社 ISBN:9787121207402 上架时间:2013-8-26 出版日期:2013 年 ...

  8. Python学习(三)流程控制

    Python流程控制 本章介绍 python 的基础流程控制.包括 if 条件语句.for 循环 和 while 循环语句: continue 及 break 的用法等. 基本用法与 C 和 Java ...

  9. Redis安装、主从配置及aof使用

    找了02,03,04三台机器,04做主,02做从,03做客户端. 都使用jumbo install redis安装了Redis(server+client). 在 02 从的 ~/.jumbo/etc ...

  10. sql表值参数

    using System;using System.Collections;using System.Collections.Specialized;using System.Data;using S ...