# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1152059 | brover29 | Bubble Sort 2 (JOI18_bubblesort2) | C++20 | 0 ms | 0 KiB |
#include "bubblesort2.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N=1e6+29;
vector<int>B;
ll st[4*N];
void build(ll v,ll l,ll r){
if(l==r){
st[v]=0;
return;
}
ll mid=(r+l)>>1;
build(v*2,l,mid);
build(v*2+1,mid+1,r);
st[v]=0;
}void upd(ll v,ll l,ll r,ll pos){
if(l==r){
st[v]++;
return;
}
ll mid=(r+l)>>1;
if(pos<=mid)upd(v*2,l,mid,pos);
else upd(v*2+1,mid+1,r,pos);
st[v]=st[v*2]+st[v*2+1];
}ll get(ll v,ll l,ll r,ll x,ll y){
if(y<l||r<x||x>y)return 0;
if(x<=l&&r<=y){
return st[v];
}
ll mid=(r+l)/2;
return (get(v*2,l,mid,x,y)+get(v*2+1,mid+1,r,x,y));
}map<ll,ll>mp;
set<ll>s;
ll timer,res[N];
vector<int> countScans(vector<int> A,vector<int> X,vector<int> V){
ll Q=X.size();
for(ll i:A)s.insert(i);
vector<int> answer;
for (int j=0;j<Q;j++) {
s.insert(V[j]);
ll mx=0;
}for(ll i:s){
mp[i]=++timer;
}for(auto &i:A)i=mp[i];
for(ll i=0;i<A.size();i++){
res[i]=(get(1,1,1e6,A[i]+1,1e6));
upd(1,1,1e6,A[i]);
}
for (int j=0;j<Q;j++) {
ll mx=0;
V[j]=mp[V[j]];
res[X[j]]=0;
for(ll i=0;i<X[j];i++){
if(A[i]>V[j])res[X[j]]++;
}
for(ll i=X[j]+1;i<A.size();i++){
if(A[i]<A[X[j]]&&V[j]<A[i])
ans[i]--;
else if(A[i]>A[x[j]]&&V[j]>A[i])
ans[i]++;
}for(ll i=0;i<A.size();i++){
mx=max(mx,res[i]);
}
A[X[j]]=V[j];
answer.push_back(mx);
}
return answer;
}
//int readInt(){
// int i;
// if(scanf("%d",&i)!=1){
// fprintf(stderr,"Error while reading input\n");
// exit(1);
// }
// return i;
//}
//
//int main(){
// int N,Q;
// N=readInt();
// Q=readInt();
//
// std::vector<int> A(N);
// for(int i=0;i<N;i++)
// A[i]=readInt();
//
// std::vector<int> X(Q),V(Q);
// for(int j=0;j<Q;j++){
// X[j]=readInt();
// V[j]=readInt();
// }
//
// std::vector<int> res=countScans(A,X,V);
//
// for(int j=0;j<int(res.size());j++)
// printf("%d\n",res[j]);
//}