zoukankan      html  css  js  c++  java
  • 牛客寒假算法基础集训营1 G 小a的排列

    题目描述

    链接:https://ac.nowcoder.com/acm/contest/317/G
    来源:牛客网

    思路:观察发现区间内l-r的长度与区间内最大值和最小值的差相等时,区间是‘萌’的

    如果长度不相等的话,我们就要寻找l--,r++的数,并且在区间内的数加入要求的区间内;

    代码如下:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 
     5 int main()
     6 {
     7     int n,x,y,l,r;
     8     int a[100005];
     9     while(cin >> n >> x >> y)
    10     {
    11         for(int i = 1;i <= n;i++)
    12         {
    13             cin >> a[i];
    14             if(a[i] == x)
    15             l = i;
    16             if(a[i] == y)
    17             r = i;
    18         }
    19         if(l > r)
    20         swap(l,r);
    21         bool flag;
    22         int min1 = 0x3f3f3f,max1 = 0,l1,r1;
    23         for(int i = l;i <= r;i++)
    24         {
    25             min1 = min(min1,a[i]);
    26             max1 = max(max1,a[i]);
    27         }
    28         while(max1 - min1 != r - l)
    29         {
    30             l1 = 1,r1 = n;
    31             while(l1 < l &&(a[l1] < min1 || a[l1] > max1))
    32             l1++;//寻找最左边的l
    33             //cout << l1 << "---";
    34             while(r1 > r &&(a[r1] < min1 || a[r1] > max1))
    35             r1--;
    36             //cout << r1 << "--" << endl;
    37             l = l1,r = r1;
    38             for(int i = l;i <= r;i++)
    39             {
    40                 min1 = min(min1,a[i]);
    41                 max1 = max(max1,a[i]);
    42             }
    43         }
    44         cout << l << " " << r << endl;
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    缓存三大问题及解决方案
    布隆过滤器
    maven 详解
    Netty是什么?
    select、poll、epoll简介
    IO
    Java并发编程:Synchronized及其实现原理
    Java并发之AQS详解
    原子更新字段类
    AtomicStampedReference解决ABA问题
  • 原文地址:https://www.cnblogs.com/lu1nacy/p/10354224.html
Copyright © 2011-2022 走看看