Submission #614053

#TimeUsernameProblemLanguageResultExecution timeMemory
614053MohamedAliSaidaneMonochrome Points (JOI20_monochrome)C++14
100 / 100
982 ms10680 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef vector<int> vi; typedef vector<ll> vll; typedef vector<pii> vpi; typedef vector<pll> vpl; #define pb push_back #define popb pop_back #define all(x) (x).begin(), (x).end() #define ff first #define ss second const int nax = 4e5 + 4; int n; int col[nax]; ll dp[nax]; vi perm, ot; struct FenwickTree { vector<int> bit; // binary indexed tree int n; FenwickTree(int n) { this->n = n; bit.assign(n, 0); } FenwickTree(vector<int> a) : FenwickTree(a.size()) { for (size_t i = 0; i < a.size(); i++) add(i, a[i]); } int sum(int r) { int ret = 0; for (; r >= 0; r = (r & (r + 1)) - 1) ret += bit[r]; return ret; } int sum(int l, int r) { return sum(r) - sum(l - 1); } void add(int idx, int delta) { for (; idx < n; idx = idx | (idx + 1)) bit[idx] += delta; } }; ll compute(int x) { if(x >= n) return 0 ; if(dp[x] != -1) return dp[x]; vpi inter; ll rep = 0; for(int i= 0 ; i < n; i++) { int a = perm[(i + x)%n]; int b = ot[i]; inter.pb({min(a,b), max(a,b)}); } sort(all(inter)); reverse(all(inter)); FenwickTree fen = FenwickTree(2 * n); for(int i= 0 ; i < n; i++) { int a = inter[i].ff; int b= inter[i].ss; rep += (ll)(fen.sum(a,b)); fen.add(a, 1); fen.add(b, -1); } return dp[x] = rep; } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); memset(dp, -1,sizeof(dp)); cin >> n; for(int i = 0 ; i < 2 * n ; i++) { char c; cin >> c; if(c == 'B') col[i] = 1; if(col[i]) perm.pb(i); else ot.pb(i); } ll ans = 0 ; int debut = 0; int fin = n - 1; int rep = debut; while(debut <= fin ) { int mid = (debut + fin)/2; //cout << mid << ' ' << compute(mid) << ' ' << compute(mid + 1) << "\n"; if(compute(mid + 1) > compute(mid)) { rep = mid + 1; debut = mid + 1; ans = max(ans, compute(mid + 1)); } else { rep = mid ; fin = mid - 1; ans = max(ans, compute(mid )); } } cout << ans; }

Compilation message (stderr)

monochrome.cpp: In function 'int32_t main()':
monochrome.cpp:108:13: warning: variable 'rep' set but not used [-Wunused-but-set-variable]
  108 |         int rep = debut;
      |             ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...