Submission #1145278

#TimeUsernameProblemLanguageResultExecution timeMemory
1145278guagua0407Monochrome Points (JOI20_monochrome)C++20
35 / 100
1082 ms13960 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; 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; 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; memset(bit,0,sizeof(bit)); 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; }; if(get(0)>get(1)){ tf=true; } int l=0,r=n-1; int val=get(0); while(l<r){ int mid=(l+r)/2; int v1=get(mid); int v2=get(mid+1); if(v1>v2){ r=mid; } else{ if(v1>=val){ l=mid+1; } else{ r=mid-1; } } } int k=2; for(int i=-k;i<=k;i++){ mx=max(mx,get(l+i)); } cout<<mx<<'\n'; return 0; } //maybe its multiset not set //yeeorz //diaoborz

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...