제출 #1326792

#제출 시각아이디문제언어결과실행 시간메모리
1326792al95ireyizPilot (NOI19_pilot)C++20
89 / 100
348 ms24680 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vll vector<ll>
#define len(x) (ll)x.size()
const ll inf = 1e9, infl = 1e18;
const ll MOD = 1e9 + 7;
const ll maxn = 5e5 + 5;
ll n, m, k = 0;

array<ll, 2> a[maxn], b[maxn];
void _() {
  cin >> n >> m;
  for(ll i = 1; i <= n; i ++){
    cin >> a[i][0]; a[i][1] = i;
  }
  for(ll i = 1; i <= m; i ++){
    cin >> b[i][0]; b[i][1] = i;
  }
  sort(a + 1, a + n + 1, greater<array<ll, 2>>());
  sort(b + 1, b + m + 1, greater<array<ll, 2>>());
  set<array<ll, 2>> s;
  ll cv = 0;
  auto add = [&](ll l, ll r) -> void{
    s.insert({l, r});
    cv += (r - l + 1) * (r - l + 2) / 2;
  };
  auto del = [&](ll l, ll r) -> void{
    s.erase({l, r});
    cv -= (r - l + 1) * (r - l + 2) / 2;
  };
  add(1, n);
  for(ll j = 1, i = 1; j <= m; j ++){
    while(a[i][0] > b[j][0]){
      auto it = s.upper_bound({a[i][1], inf});
      it --;
      auto [l, r] = *it;
      del(l, r);
      if(l <= a[i][1] - 1) add(l, a[i][1] - 1);
      if(a[i][1] + 1 <= r) add(a[i][1] + 1, r);
      i ++;
    }
    b[j][0] = cv;
  }
  // for(auto [x, y] : s) cout << x << ' ' << y << '\n';
  sort(b + 1, b + m + 1, [&](auto x, auto y){ return x[1] < y[1]; });
  for(ll i = 1; i <= m; i ++){
    cout << b[i][0] << '\n';
  }
}
signed main() {
  cin.tie(0)->sync_with_stdio(0);
  ll t = 1;
  // cin >> t;
  while(t --) _();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...