Submission #1263623

#TimeUsernameProblemLanguageResultExecution timeMemory
1263623ivopavMonochrome Points (JOI20_monochrome)C++20
4 / 100
1 ms328 KiB
#include <bits/stdc++.h> using namespace std; void upd(int ind,int val,vector<int>& tour,int ofs){ ind+=ofs; tour[ind]+=val; while (ind>1){ ind/=2; tour[ind]=tour[ind*2]+tour[ind*2+1]; } } int que(int l,int r,int l2,int r2,int ind,vector<int>& tour){ if (r<l2 || r2<l){ return 0; } if (l<=l2 && r2<=r){ return tour[ind]; } return que(l,r,l2,(l2+r2)/2,ind*2,tour)+que(l,r,(l2+r2)/2+1,r2,ind*2+1,tour); } int main(){ //ios_base::sync_with_stdio(false); //cin.tie(NULL); int n; string s; cin >> n >> s; int isp=0; int ofs=1; while (ofs<n*4){ ofs*=2; } vector<int> w={}; vector<int> b={}; for (int i=0;i<n*2;i++){ if (s[i]=='W'){ w.push_back(i); } else { b.push_back(i); } } for (int k=max(0,n/2-5);k<min(n,n/2+5);k++){ // cout << k << "\n"; int ind1=0; int ind2=k; vector<pair<int,int>> lis(n,pair<int,int>{}); for (int i=0;i<n;i++){ lis[i].first=w[ind1]; lis[i].second=b[ind2]; if (lis[i].second<lis[i].first){ swap(lis[i].first,lis[i].second); } ind1++; ind1%=n; ind2++; ind2%=n; } sort(lis.begin(),lis.end()); int rje=0; vector<int> tour(ofs*2,0); for (int i=0;i<n;i++){ int a=lis[i].first; int b=lis[i].second; // cout << a << " " << b << "\n"; rje+=que(a,b,0,ofs-1,1,tour); // cout << rje << "\n"; upd(b,1,tour,ofs); // cout << "a\n"; } isp=max(isp,rje); // cout << k << " " << rje << "\n"; } cout << isp << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...