Submission #202010

#TimeUsernameProblemLanguageResultExecution timeMemory
202010SegtreeBubble Sort 2 (JOI18_bubblesort2)C++14
17 / 100
356 ms760 KiB
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<unordered_set>
#include<unordered_map>
#include"bubblesort2.h"
using namespace std;
typedef int ll;
typedef vector<ll> vll;
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define all(x) x.begin(),x.end()
#define rep(i,n) for(int i=0;i<n;i++)
#define mod 1000000007
#define mad(a,b) a=(a+b)%mod
#define N 4010
ll dat[2*N];
void init(){
    rep(i,2*N)dat[i]=0;
}
void upd(ll i,ll x){
    i+=N;
    dat[i]+=x;
    for(;i;i>>=1)dat[i/2]=dat[i]+dat[i^1];
}
ll qry(ll l,ll r){
    l+=N,r+=N+1;
    ll res=0;
    for(ll a=l,b=r;a<b;a>>=1,b>>=1){
	if(a&1)res+=dat[a++];
	if(b&1)res+=dat[--b];
    }
    return res;
}

ll solve(vll a){
    //for(auto t:a)cout<<t<<" ";cout<<endl;
    ll n=a.size(),ans=0;
    init();
    for(int i=0;i<n;i++){
	chmax(ans,qry(a[i]+1,N-1));
	upd(a[i],1);
    }
    return ans;
}
vll countScans(vll a,vll x,vll v){
    ll n=a.size(),q=x.size();
    if(n>2000)return a;
    vll zs;
    for(auto t:a)zs.push_back(t);
    for(auto t:v)zs.push_back(t);
    sort(all(zs));
    zs.erase(unique(all(zs)),zs.end());
    for(int i=0;i<a.size();i++)a[i]=lower_bound(all(zs),a[i])-zs.begin();
    for(int i=0;i<v.size();i++)v[i]=lower_bound(all(zs),v[i])-zs.begin();
    vll fans;
    rep(k,q){
	a[x[k]]=v[k];
	fans.push_back(solve(a));
    }
    return fans;
}
/*int main(){
    ll n,q;
    cin>>n>>q;
    vll a(n),x(q),v(q);
    rep(i,n)cin>>a[i];
    rep(i,q)cin>>x[i]>>v[i];
    vll res=countScans(a,x,v);
    for(auto t:res)cout<<t<<endl;
}*/


Compilation message (stderr)

bubblesort2.cpp: In function 'vll countScans(vll, vll, vll)':
bubblesort2.cpp:56:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<a.size();i++)a[i]=lower_bound(all(zs),a[i])-zs.begin();
                 ~^~~~~~~~~
bubblesort2.cpp:57:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<v.size();i++)v[i]=lower_bound(all(zs),v[i])-zs.begin();
                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...