제출 #893877

#제출 시각아이디문제언어결과실행 시간메모리
893877Darren0724Monochrome Points (JOI20_monochrome)C++17
100 / 100
1228 ms6236 KiB
#pragma GCC optimize("Ofast","O3","unroll-loops") #pragma GCC target("avx2") #include <bits/stdc++.h> using namespace std; #define ll long long #define LCBorz ios_base::sync_with_stdio(false); cin.tie(0); #define all(x) x.begin(), x.end() #define endl '\n' #define x first #define y second const int N=400005; const int INF=1e18; const int mod=924844033; struct BIT{ vector<int> v=vector<int>(N); void add(int p,int t){ for(int i=p;i<N;i+=i&(-i)){ v[i]+=t; } } ll ask(int p){ ll ans=0; for(int i=p;i>0;i-=i&(-i)){ ans+=v[i]; } return ans; } }; int32_t main() { LCBorz; int n;cin>>n; string s;cin>>s; vector<int> a,b; for(int i=0;i<n<<1;i++){ if(s[i]=='W'){ a.push_back(i+1); } else{ b.push_back(i+1); } } auto solve=[&](int k)->ll { vector<pair<int,int>> v(n); BIT bit; for(int i=0;i<n;i++){ v[i]=make_pair(a[i],b[(i+k)%n]); if(v[i].x>v[i].y){ swap(v[i].x,v[i].y); } bit.add(v[i].x,1); bit.add(v[i].y,-1); } ll ans=0; sort(all(v)); for(int i=0;i<n;i++){ ans+=bit.ask(v[i].y-1)-bit.ask(v[i].x); bit.add(v[i].x,-1); bit.add(v[i].y,2); } return ans; }; ll ans=0; int l=0,r=n+1; while(r-l>4){ int m=(l+r)>>1; if(solve(m)>solve(m+1)){ r=m+1; } else{ l=m-1; } } for(int i=l;i<=r;i++){ ans=max(ans,solve(i)); } cout<<ans/2<<endl; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

monochrome.cpp:12:15: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
   12 | const int INF=1e18;
      |               ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...