zoukankan      html  css  js  c++  java
  • SPOJDRUIDEOI

    题目链接【http://www.spoj.com/problems/DRUIDEOI/en/】

    题意:给出n个数,从1到n围城一个环(1和n相连),求每个数左边第一个比他大的第一个下标,右边第一个比他大的下标,若所有的值都没有i大输出-1,-1。

    题解:为了构成一个环,把所有的数重复两遍即:1,2,3,4,5,1,2,3,4,5,分别从前到后和从后到前维护单调递减栈即可。注意下标。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 2e5 + 15;
    int a[maxn], que[maxn];
    int A[maxn], B[maxn];
    int T, n, ed, ma;
    int main ()
    {
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d", &n);
            ma = 0;
            ed = 0;
            for(int i = 1; i <= n; i++)
            {
                scanf("%d", &a[i]);
                a[i + n] = a[i];
                if(ma < a[i]) ma = a[i];
            }
            for(int i = 1; i <= 2 * n; i++)
            {
                while(ed && a[que[ed]] < a[i])
                {
                    A[que[ed]] = i > n ? i % n : i;
                    ed--;
                }
                que[++ed] = i;
                if(que[1] > n) break;
            }
            ed = 0;
            for(int i = 2 * n; i >= 1; i--)
            {
                while(ed && a[que[ed]] < a[i])
                {
                    B[que[ed] > n ? que[ed] % n : que[ed]] = i > n ? i % n : i;
                    ed--;
                }
                que[++ed] = i;
                if(que[1] < n) break;
            }
            for(int i = 1; i <= n; i++)
            {
                if(a[i] == ma)
                    A[i] = B[i] = -1;
            }
            for(int i = 1; i <= n; i++)
                printf("%d %d
    ", B[i], A[i]);
    
        }
        return 0;
    }
    想的太多,做的太少。
  • 相关阅读:
    java事件处理(贪吃蛇)
    九九乘法表
    使用文件包含指令include
    jsp页面的基本构成
    软件测试博客

    成功职业女性处世的10大秘诀
    再见啦,冬冬妹
    网摘——杜晓眼眼中的尹珊珊:什么都要,什么都要得到
    网摘——事关“工程师思维”
  • 原文地址:https://www.cnblogs.com/pealicx/p/6407262.html
Copyright © 2011-2022 走看看