Submission #1145358

#TimeUsernameProblemLanguageResultExecution timeMemory
1145358guagua0407Monochrome Points (JOI20_monochrome)C++20
100 / 100
1036 ms13964 KiB
//#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define f first #define s second #define all(x) x.begin(),x.end() #define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; void setIO(string s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } const int mxn=4e5+5; vector<int> bit(mxn); void update(int pos,int val){ for(;pos<mxn;pos+=(pos&-pos)){ bit[pos]+=val; } } int query(int pos){ int ans=0; for(;pos>0;pos-=(pos&-pos)){ ans+=bit[pos]; } return ans; } int main() {_ int n; cin>>n; vector<int> a,b; for(int i=1;i<=2*n;i++){ char c; cin>>c; if(c=='B') a.push_back(i); else b.push_back(i); } bool tf=false; vector<ll> rec(n,-1); ll mx=0; function<ll(int)> get=[&](int k){ k=(k%n+n)%n; if(tf) k=n-k-1; if(rec[k]!=-1) return rec[k]; vector<pair<int,int>> p; for(int i=0;i<n;i++){ p.push_back({a[i],b[(i+k)%n]}); } for(auto &v:p){ if(v.s<v.f) swap(v.f,v.s); } vector<pair<int,int>> vec; for(int i=0;i<n;i++){ vec.push_back({p[i].f,-1}); vec.push_back({p[i].s,i}); } sort(all(vec)); ll ans=0; fill(all(bit),0); for(auto v:vec){ auto [pos,id]=v; if(id<0){ ans-=query(pos); } else{ ans+=query(p[id].f); update(p[id].f,1); } } mx=max(mx,ans); return rec[k]=ans; }; function<bool(int,int)> pred=[&](int i,int j){ return get(i)>get(j); }; if(n==1){ cout<<get(0)<<'\n'; return 0; } int l=0,r=n; bool rv=pred(1,0); while(r-l>1){ int m=(l+r)/2; if(pred(0,m)?rv:pred(m,(m+1)%n)) r=m; else l=m; } cout<<(pred(l,r%n)?get(l):get(r%n))<<'\n'; return 0; } //maybe its multiset not set //yeeorz //diaoborz /* 42 38 29 22 18 17 18 21 26 33 */

Compilation message (stderr)

monochrome.cpp: In function 'void setIO(std::string)':
monochrome.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     freopen((s + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
monochrome.cpp:16:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     freopen((s + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...