提出 #7576185


ソースコード 拡げる

#include <bits/stdc++.h>

#define rep(i, n) for (ll i = 0; i < (n); i++)
#define rep2(i, a, b) for (ll i = (a); i < (b); i++)
typedef uint64_t ull;
typedef int64_t ll;
typedef std::pair<ll, ll> PLL;

using namespace std;

signed main() {
  ll N;
  cin >> N;
  vector<ll> t(N+1); // t[val] = index
  rep(i, N) {
    ll x;
    cin >> x;
    t[x] = i+1;
  }

  ll ans = 0;
  set<ll> s;
  for (ll val=N; val>=1; val--) {
    {
      // 右側に最大値がある場合
      ll j, i1, i2;
      auto it = s.lower_bound(t[val]);
      if (it == s.end())
        goto END1;
      i1 = *it;
      it++;
      if (it == s.end())
        i2 = N+1;
      else
        i2 = *it;

      it = s.lower_bound(t[val]);
      if (it == s.begin()) {
        j = 0;
      } else {
        it--;
        j = *it;
      }

      // printf("right %d %dx%d\n", val, (t[val]-j) , (i2-i1));
      ans += val * (t[val]-j) * (i2-i1);
      END1: ;
    }

    {
      // 左側に最大値がある場合
      ll j2, j1, i;
      auto it = s.lower_bound(t[val]);
      if (it == s.begin()) {
        goto END2;
      }
      it--;
      j1 = *it;
      if (it == s.begin()) {
        j2 = 0;
      } else {
        it--;
        j2 = *it;
      }
      it = s.lower_bound(t[val]);
      if (it == s.end()) {
        i = N+1;
      } else {
        i = *it;
      }
      // printf("left %dx%d\n", val, (j1-j2), (i-t[val]));
      ans += val * (j1-j2) * (i-t[val]);

      END2: ;
    }

    s.insert(t[val]);
  } 
  cout << ans << endl;
  return 0;
}

提出情報

提出日時
問題 E - Second Sum
ユーザ bobuhiro11
言語 C++14 (GCC 5.4.1)
得点 500
コード長 1606 Byte
結果 AC
実行時間 97 ms
メモリ 5760 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 3
AC × 22
セット名 テストケース
Sample 00-sample-01.txt, 00-sample-02.txt, 00-sample-03.txt
All 00-sample-01.txt, 00-sample-02.txt, 00-sample-03.txt, 01-small-01.txt, 01-small-02.txt, 01-small-03.txt, 01-small-04.txt, 01-small-05.txt, 02-large-01.txt, 02-large-02.txt, 02-large-03.txt, 02-large-04.txt, 02-large-05.txt, 03-max-01.txt, 03-max-02.txt, 04-min-01.txt, 05-sorted-01.txt, 05-sorted-02.txt, 06-almost-sorted-01.txt, 06-almost-sorted-02.txt, 06-almost-sorted-03.txt, 06-almost-sorted-04.txt
ケース名 結果 実行時間 メモリ
00-sample-01.txt AC 1 ms 256 KiB
00-sample-02.txt AC 1 ms 256 KiB
00-sample-03.txt AC 1 ms 256 KiB
01-small-01.txt AC 1 ms 256 KiB
01-small-02.txt AC 1 ms 256 KiB
01-small-03.txt AC 1 ms 256 KiB
01-small-04.txt AC 1 ms 256 KiB
01-small-05.txt AC 1 ms 256 KiB
02-large-01.txt AC 84 ms 5120 KiB
02-large-02.txt AC 51 ms 3328 KiB
02-large-03.txt AC 88 ms 5248 KiB
02-large-04.txt AC 90 ms 5376 KiB
02-large-05.txt AC 54 ms 3456 KiB
03-max-01.txt AC 97 ms 5760 KiB
03-max-02.txt AC 97 ms 5760 KiB
04-min-01.txt AC 1 ms 256 KiB
05-sorted-01.txt AC 92 ms 5504 KiB
05-sorted-02.txt AC 94 ms 5632 KiB
06-almost-sorted-01.txt AC 91 ms 5248 KiB
06-almost-sorted-02.txt AC 84 ms 5248 KiB
06-almost-sorted-03.txt AC 94 ms 5504 KiB
06-almost-sorted-04.txt AC 85 ms 5248 KiB