Submission #1095896

#TimeUsernameProblemLanguageResultExecution timeMemory
1095896_8_8_Monochrome Points (JOI20_monochrome)C++17
35 / 100
2041 ms11852 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 3e5 + 12, MOD = (int)1e9 + 7; int n, t[N * 2]; string s; vector<int> x, y; void add(int i, int val) { while(i <= n + n) { t[i] += val; i += i & -i; } } ll get(int i) { ll ret = 0; while(i) { ret += t[i]; i -= i & -i; } return ret; } ll get(int l, int r) { return get(r) - get(l - 1); } ll calc(int k) { for(int i = 1; i <= n + n; i++) { t[i] = 0; } ll ret = 0; vector<pair<int,int>> a; for(int i = 0; i < n; i++) { int j = (i + k) % n; int l = x[i], r = y[j]; if(l > r) { swap(l, r); } a.emplace_back(l, -1); a.emplace_back(r, l); } // return 0; sort(a.begin(), a.end()); for(auto [x, y]:a) { if(y == -1) { add(x, 1); } else { ret += get(y + 1, x); add(y, -1); } } return ret; } void test() { cin >> n >> s; for(int i = 0; i < n + n; i++) { if(s[i] == 'W') { x.push_back(i + 1); } else { y.push_back(i + 1); } } ll res = 0; for(int i = 0; i < n; i++) { // cout << i << ' ' << calc(i) << '\n'; res = max(res, calc(i)); } cout << res << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int t = 1; // cin >> t; while(t--) test(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...