Submission #1088922

#TimeUsernameProblemLanguageResultExecution timeMemory
1088922WansurMonochrome Points (JOI20_monochrome)C++14
100 / 100
1411 ms7716 KiB
#include <bits/stdc++.h> #define ent '\n' //#define int long long using namespace std; typedef long long ll; const int maxn = 2e5 + 12; int t[maxn * 2]; int a[maxn], b[maxn]; int n, m, k; void upd(int i, int x){ for(; i <= n * 2;i |= i + 1){ t[i] += x; } } int GET(int i){ int ans = 0; for(; i > 0; i = (i & (i + 1)) - 1){ ans += t[i]; } return ans; } int get(int l, int r){ return GET(r) - GET(l - 1); } ll get(int k){ for(int i=1;i<=n*2;i++){ t[i] = 0; } vector<pair<int, int>> v; for(int i=0;i<n;i++){ v.push_back({min(a[i], b[(i + k) % n]), max(a[i], b[(i + k) % n])}); } sort(v.begin(), v.end()); ll ans = 0; for(auto [l, r] : v){ ans += get(l, r); upd(r, 1); } return ans; } void solve(){ cin >> n; int l = 0, r = 0; ll ans = 0; for(int i=1;i<=2*n;i++){ char c; cin >> c; if(c == 'W') a[l++] = i; else b[r++] = i; } l = 1, r = n; while(r - l > 3){ int m1 = l + (r - l) / 3, m2 = r - (r - l) / 3; ll x = get(m1), y = get(m2); ans = max({ans, x, y}); if(x < y) l = m1; else r = m2; } for(int i=l;i<=r;i++){ ans = max(ans, get(i)); } cout << ans << ent; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; // cin >> t; while(t--){ solve(); } }

Compilation message (stderr)

monochrome.cpp: In function 'll get(int)':
monochrome.cpp:41:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   41 |     for(auto [l, r] : v){
      |              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...