题目链接:https://www.hackerrank.com/challenges/almost-sorted-interval

题目大意:

定义一个“几乎单调”区间(区间最小值在最左面,最大值在最右面)

给一个N的排列,求“几乎单调”区间的个数

N=100W  解法为O(n)

很好的思维题!

想了一下午,其实自己离正解已经不远了,,不过最后还是看了学长的ac代码

然后基本上秒懂了

具体思维方式不好说啊。。贴个代码,以后又不会了的话慢慢回忆吧= =||

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include<string.h>
  4. #include<algorithm>
  5. #include<string>
  6. #include<ctype.h>
  7. #include<queue>
  8. using namespace std;
  9. #define MAXN 10000
  10. deque<int> qinc;
  11. deque<int> qdec;
  12. int a[];
  13. int num[];
  14. int main()
  15. {
  16. int n;
  17. scanf("%d",&n);
  18. for(int i=;i<=n;i++)
  19. {
  20. num[i]=;
  21. }
  22. long long ans=;
  23. for(int i=;i<n;i++)
  24. {
  25. scanf("%d",a+i);
  26. }
  27. for(int i=;i<n;i++)
  28. {
  29. if(qinc.empty())
  30. {
  31. qinc.push_back(a[i]);
  32. }
  33. else
  34. {
  35. int tmp=qinc.back();
  36. while(tmp>a[i])
  37. {
  38. num[qdec.back()]--;
  39. if(num[qdec.back()]==)
  40. qdec.pop_back();
  41. qinc.pop_back();
  42. if(qinc.empty())
  43. break;
  44. tmp=qinc.back();
  45. }
  46. qinc.push_back(a[i]);
  47. }
  48. if(qdec.empty())
  49. {
  50. qdec.push_back(a[i]);
  51. ans++;
  52. continue;
  53. }
  54. int tmp=qdec.back();
  55. while(tmp<a[i])
  56. {
  57. num[a[i]]+=num[tmp];
  58. qdec.pop_back();
  59. if(qdec.empty())
  60. break;
  61. tmp=qdec.back();
  62. }
  63. ans+=num[a[i]];
  64. qdec.push_back(a[i]);
  65. }
  66. cout<<ans<<endl;
  67. return ;
  68. }

hackerrank:Almost sorted interval的更多相关文章

  1. Redis in .NET Core 入门:(5) Sorted SET

    第1篇:https://www.cnblogs.com/cgzl/p/10294175.html 第2篇 String:https://www.cnblogs.com/cgzl/p/10297565. ...

  2. LeetCode第[88]题(Java):Merge Sorted Array(合并已排序数组)

    题目:合并已排序数组 难度:Easy 题目内容: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as ...

  3. LeetCode OJ:Convert Sorted List to Binary Search Tree(将排序好的链表转换成二叉搜索树)

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  4. LeetCode第[21][23]题(Java):Merge Sorted Lists

    题目:合并两个已排序链表 难度:Easy 题目内容: Merge two sorted linked lists and return it as a new list. The new list s ...

  5. LeetCode OJ:Merge Sorted Array(合并排序的数组)

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  6. LeetCode OJ:Convert Sorted Array to Binary Search Tree(将排序好的数组转换成二叉搜索树)

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 讲一 ...

  7. leetcode 题解:Merge Sorted Array(两个已排序数组归并)

    题目: Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume ...

  8. [LeetCode]题解(python):109-Convert Sorted List to Binary Search Tree

    题目来源: https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/ 题意分析: 给定一个排好序的链表,将这个链 ...

  9. [LeetCode]题解(python):108-Convert Sorted Array to Binary Search Tree

    题目来源: https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 题意分析: 给出一个排好序的数组,根据这 ...

随机推荐

  1. 了解SVG

    页的节点类型,我们将说明怎样通过Illustrator高速的把SVG文档加入到网页中.我们还会讲讲D3.js,一个强大的.SVG控制的JavaScript库. "SVG并不仅仅用于像素处理. ...

  2. 使用CSS为内容设定特定的鼠标样式(cursor)介绍

    相信大家都知道我们的鼠标在网页中不同的元素中有不同的显示(例如 a 元素就显示为“箭头指针”),但是其实我们还可以自定义这些有趣的东西哦!今天“畅想资源”就来教大家如何使用CSS为内容设定特定的鼠标样 ...

  3. Android(java)学习笔记258:JNI之hello.c(c代码功能实现)指针语法解析

    1. 接下来我们细讲分析一下前面一讲中,c功能实现的代码: (1)hello.c : #include <jni.h> char* getHello() { //////// return ...

  4. img的onerror事件

    使用场景 其实on error使用上是比较简单的. 当我们网站上出现了无效图片,而我们希望用友好的方式告诉用户,而不是显示红叉叉. w3c上解释的 定义和用法: onerror 事件会在文档或图像加载 ...

  5. eclipse 库 library jar包 工程 总结

    引用库错误 如果在libraries中发现有小红叉,表明引用库错误 解决办法:在左侧projects中add引用到的库 如:我们的支付库引用了以下三个库 那么需要在projects中add这三个库   ...

  6. hibernate01ORM的引入

    /**01.之前的方式 在while()中书写的 * int id = rs.getInt("gradeid"); String gradeName = rs.getString( ...

  7. css06背景图片

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. SGU131--NYOJ435

    参考blog http://m.blog.csdn.net/blog/u012760629/36927465 http://www.cppblog.com/menrowitianya/archive/ ...

  9. (转)HTML特殊字符

    HTML 原始码 显示结果 描述 < < 小於号或显示标记 > > 大於号或显示标记 & & 可用於显示其它特殊字符 " " 引号 ® ® ...

  10. jQuery 基本实现功能模板

    下面是列出了基本功能的实现 <!DOCTYPE html> <html> <head> <script src="http://libs.baidu ...