Submission #1295099

#TimeUsernameProblemLanguageResultExecution timeMemory
1295099tudor_costinBubble Sort 2 (JOI18_bubblesort2)C++20
60 / 100
9091 ms38040 KiB
#include <bits/stdc++.h> using namespace std; class AIB { private: vector<int> aib; int n; int lsb(int x) { return x&(-x); } public: AIB(int siz) :aib(siz+1,0) { n=siz; } void update(int poz,int val) { for(int i=poz; i<=n; i+=lsb(i)) { aib[i]+=val; } return; } int query(int poz) { int sol=0; for(int i=poz; i>=1; i-=lsb(i)) { sol+=aib[i]; } return sol; } }; vector<int> countScans(vector<int> a,vector<int> x,vector<int> v) { int n=a.size(),q=x.size(); map<int,vector<pair<int,int>>> nrm; for(int i=0; i<n; i++) nrm[a[i]].push_back({i,0}); for(int i=0; i<q; i++) nrm[v[i]].push_back({i,1}); int nrc=0; for(auto [val,V]:nrm) { nrc++; for(auto [id,tip]:V) { if(tip==0) a[id]=nrc; else v[id]=nrc; } } if(nrc>100) { AIB aib(nrc); vector<int> ans(q,0); for(int i=0; i<q; i++) { a[x[i]]=v[i]; for(int j=0; j<n; j++) { ans[i]=max(ans[i],aib.query(nrc)-aib.query(a[j])); aib.update(a[j],1); } for(int j=0; j<n; j++) aib.update(a[j],-1); } return ans; } else { vector<AIB> aib; AIB temp(0); aib.push_back(temp); for(int i=1;i<=nrc;i++) { AIB temp(n); aib.push_back(temp); } vector<set<int>> poz(nrc+1); for(int i=0;i<n;i++) { aib[a[i]].update(i+1,1); poz[a[i]].insert(i+1); } vector<int> ans(q,0); for(int i=0;i<q;i++) { aib[a[x[i]]].update(x[i]+1,-1); aib[v[i]].update(x[i]+1,1); poz[a[x[i]]].erase(x[i]+1); poz[v[i]].insert(x[i]+1); a[x[i]]=v[i]; int maxi=0; for(int j=1;j<=nrc;j++) { if(poz[j].empty()) continue; int last=(*poz[j].rbegin()); if(last<maxi) continue; maxi=last; int sum=0; for(int k=j+1;k<=nrc;k++) { sum+=aib[k].query(last); } ans[i]=max(ans[i],sum); } } return ans; } } /*int main() { int n,q; cin>>n>>q; vector<int> a(n),x(q),v(q); for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<q;i++) cin>>x[i]>>v[i]; vector<int> ans=countScans(a,x,v); for(int x:ans) cout<<x<<'\n'; return 0; }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...