| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1176958 | sleepntsheep | Sightseeing in Kyoto (JOI22_kyoto) | C++20 | 1 ms | 1092 KiB | 
#include<stdio.h>
#include<string.h>
#include<queue>
#define N 211111
struct A{
    int i,c[2];
    bool operator<(const A&o)const{
	return c[0]*1ll*o.c[1]<c[1]*1ll*o.c[0];
    }
}a[N];
int h,w,ds[N],p[N];
long long ans,rc[N],dc[N];
int fnd(int i){
    return ds[i]<0?i:(ds[i]=fnd(ds[i]));
}
void unte(int i,int j){
    if((i=fnd(i))==(j=fnd(j)))return;
    ds[j]=i;
    ans+=a[i].c[1]*1ll*a[j].c[0];
    a[i].c[0]+=a[j].c[0],a[i].c[1]+=a[j].c[1];
}
std::priority_queue<A>pq;
int main(){
    memset(ds,-1,sizeof ds);
    scanf("%d%d",&h,&w);
    for(int l,x,i=1;i<=h;++i){
	scanf("%d",&x);
	a[i].c[1]=x;
	if(i>1){
	    a[i].c[1]-=l;
	    p[i]=i-1;
	}else p[i]=0;
	dc[i]=a[i].c[1];
	l=x;
	a[i].c[0]=1;
	a[i].i=i;
    }
    for(int l,x,i=1;i<=w;++i){
	scanf("%d",&x);
	a[h+i].c[1]=x;
	if(i>1){
	    a[h+i].c[1]-=l;
	    p[h+i]=h+i-1;
	}else p[h+i]=0;
	rc[i]=a[h+i].c[1];
	l=x;
	a[h+i].c[0]=1;
	a[h+i].i=h+i;
    }
    for(int i=1;i<=h+w;++i)pq.push(a[i]);
    while(pq.size()){
	auto x=pq.top();pq.pop();
	int i=x.i;
	if(fnd(i)!=i)continue;
	if(i){
	    unte(p[i],i);
	    pq.push(a[fnd(p[i])]);
	}
    }
    for(int i=2;i<=h;++i){
	ans-=dc[i];
	dc[i]+=dc[i-1];
    }
    for(int i=2;i<=w;++i){
	ans-=rc[i];
	rc[i]+=rc[i-1];
    }
    printf("%lld\n",ans);
    return 0;
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
