zoukankan      html  css  js  c++  java
  • [nowcoderACM_223C][区区区间间间]

    题目链接

    思路

    考虑用单调栈,栈顶为最大元素。当得到一个新值得时候,将这个值宇栈顶比较。因为栈顶是前面的最大元素。所以只要当前元素比栈顶大,那么肯定比前面的都大。只要将这个元素乘上前面的个数就行了。

    然后考虑对于像5,4这样的情况应该怎么办。因为4比5小,所以当前四的贡献就是将前面的每个值都加上一遍。

    代码

    #include<cstdio>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    const int N = 100000 +100;
    ll a[N],q[N];
    ll n;
    ll work() {
        int tail = 0;
        ll now = 0,ans = 0;
        for(int i = 1; i <= n;++i) {
            while(a[i] > a[q[tail]] && tail) now -= a[q[tail]] * (q[tail] - q[tail - 1]),tail--;
            q[++tail] = i;
            now += a[i] * (q[tail] - q[tail - 1]);
            ans += now;
        }
        return ans;
    }
    int main() {
        int T;
        scanf("%d",&T);
        while(T--) {
            scanf("%d",&n);
            for(int i = 1;i <= n;++i) scanf("%lld",&a[i]);
            ll ans = 0;
            ans += work();
            for(int i = 1;i <= n;++i) a[i] = -a[i];
            ans += work();
            cout<<ans<<endl;
        }
        return 0;
    }
    

    一言

    修行要有耐性,要能甘于淡泊,乐于寂寞。

  • 相关阅读:
    zcu106 sd卡mount错误
    petalinux如何保留u-boot和kernel源码
    mali开发板
    v550 bare-metal 裸机 结构
    make打印隐含变量和隐含规则
    麒麟加速器
    petalinux定制rootfs 加入iperf memtester ethtool
    kafka分区选主机制
    java8 String intern()
    Storm之配置文件
  • 原文地址:https://www.cnblogs.com/wxyww/p/9896332.html
Copyright © 2011-2022 走看看