提出 #52091252


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ll long long
#define ii pair<int,int>
#define iii tuple<int,int,int>
#define fi first
#define se second
#define endl '\n'
#define debug(x) cout << #x << ": " << x << endl

#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define lb lower_bound
#define ub upper_bound

#define rep(x,start,end) for(int x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--))
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()

mt19937 rng(chrono::system_clock::now().time_since_epoch().count());

int n;
ii arr[200005];
int ans[200005];

int idx[200005];
int pos[200005];

set<int> s;
int l[200005],r[200005];

int sum=0;
int curr=0;
int ss=0;

void add(int i){
	auto it=s.insert(i).fi;
	
	int a=*prev(it);
	int b=*next(it);
	
	l[i]=a;
	r[i]=b;
	r[a]=l[b]=i;
	
	if (i<curr){
		ss++;
		sum+=arr[idx[i]].fi;
	}
}

void del(int i){
	auto it=s.find(i);
	
	if (i<=curr){
		ss--;
		sum-=arr[idx[i]].fi;
	}
	if (i==curr){
		curr=l[curr];
	}
	
	int a=*prev(it);
	int b=*next(it);
	
	r[a]=b;
	l[b]=a;
	
	s.erase(it);
}

void rebal(int k){
	while (ss<k && r[curr]!=200004){
		curr=r[curr];
		ss++;
		sum+=arr[idx[curr]].fi;
	}
	while (ss>k){
		ss--;
		sum-=arr[idx[curr]].fi;
		curr=l[curr];
	}
}

void dnc(int l,int r,int kl,int kr){
	int km=kl+kr>>1;
	
	int best=1e18;
	int idx=-1;
	rep(x,l,r+1){
		rebal(km-1);
		if (ss==km-1){
			if (best>sum+arr[x].fi+arr[x].se){
				best=sum+arr[x].fi+arr[x].se;
				idx=x;
			}
		}
		add(pos[x]);
	}
	
	//cout<<l<<" "<<r<<" "<<kl<<" "<<kr<<" "<<idx<<" "<<km<<endl;
	
	ans[km]=best;
	
	rep(x,r+1,idx) del(pos[x]);
	if (km!=kr) dnc(idx,r,km+1,kr);
	
	rep(x,idx,l) del(pos[x]);
	if (km!=kl) dnc(l,idx,kl,km-1);
}


signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin.exceptions(ios::badbit | ios::failbit);
	
	s={0,200004};
	r[0]=200004;
	l[200004]=0;
	
	cin>>n;
	rep(x,1,n+1) cin>>arr[x].fi>>arr[x].se;
	rep(x,1,n+1) arr[x].fi=-arr[x].fi;
	
	sort(arr+1,arr+n+1,[](ii i,ii j){
		return i.se<j.se;
	});
	
	rep(x,1,n+1) idx[x]=x;
	sort(idx+1,idx+n+1,[](int i,int j){
		return arr[i]<arr[j];
	});
	
	rep(x,1,n+1) pos[idx[x]]=x;
	
	dnc(1,n,1,n);
	
	rep(x,1,n+1) cout<<-ans[x]<<endl;
}

提出情報

提出日時
問題 G - Max (Sum - Max)
ユーザ errorgorn
言語 C++ 20 (gcc 12.2)
得点 650
コード長 2411 Byte
結果 AC
実行時間 1569 ms
メモリ 24160 KiB

コンパイルエラー

Main.cpp: In function ‘void dnc(long long int, long long int, long long int, long long int)’:
Main.cpp:90:18: warning: suggest parentheses around ‘+’ inside ‘>>’ [-Wparentheses]
   90 |         int km=kl+kr>>1;
      |                ~~^~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 650 / 650
結果
AC × 3
AC × 60
セット名 テストケース
Sample example0.txt, example1.txt, example2.txt
All example0.txt, example1.txt, example2.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt
ケース名 結果 実行時間 メモリ
example0.txt AC 1 ms 3536 KiB
example1.txt AC 1 ms 3524 KiB
example2.txt AC 1 ms 3544 KiB
test_00.txt AC 220 ms 8912 KiB
test_01.txt AC 270 ms 9860 KiB
test_02.txt AC 1159 ms 22144 KiB
test_03.txt AC 489 ms 13680 KiB
test_04.txt AC 149 ms 7536 KiB
test_05.txt AC 1219 ms 23968 KiB
test_06.txt AC 1220 ms 23940 KiB
test_07.txt AC 1216 ms 23912 KiB
test_08.txt AC 1220 ms 24004 KiB
test_09.txt AC 1216 ms 24008 KiB
test_10.txt AC 1219 ms 23964 KiB
test_11.txt AC 1215 ms 24024 KiB
test_12.txt AC 1219 ms 24016 KiB
test_13.txt AC 1219 ms 24012 KiB
test_14.txt AC 1223 ms 24008 KiB
test_15.txt AC 1546 ms 23828 KiB
test_16.txt AC 1566 ms 23880 KiB
test_17.txt AC 1563 ms 23832 KiB
test_18.txt AC 1545 ms 23824 KiB
test_19.txt AC 1569 ms 23956 KiB
test_20.txt AC 1216 ms 24012 KiB
test_21.txt AC 1219 ms 24004 KiB
test_22.txt AC 1212 ms 24012 KiB
test_23.txt AC 1221 ms 24012 KiB
test_24.txt AC 1220 ms 24000 KiB
test_25.txt AC 684 ms 24028 KiB
test_26.txt AC 692 ms 23976 KiB
test_27.txt AC 688 ms 24012 KiB
test_28.txt AC 692 ms 23952 KiB
test_29.txt AC 695 ms 24056 KiB
test_30.txt AC 738 ms 23964 KiB
test_31.txt AC 701 ms 23836 KiB
test_32.txt AC 716 ms 23964 KiB
test_33.txt AC 790 ms 23956 KiB
test_34.txt AC 738 ms 23888 KiB
test_35.txt AC 1233 ms 24024 KiB
test_36.txt AC 1214 ms 23960 KiB
test_37.txt AC 1218 ms 24140 KiB
test_38.txt AC 1228 ms 23876 KiB
test_39.txt AC 1205 ms 23976 KiB
test_40.txt AC 1218 ms 24016 KiB
test_41.txt AC 1222 ms 24160 KiB
test_42.txt AC 1221 ms 23876 KiB
test_43.txt AC 1222 ms 24004 KiB
test_44.txt AC 1210 ms 23964 KiB
test_45.txt AC 1217 ms 24132 KiB
test_46.txt AC 1216 ms 23904 KiB
test_47.txt AC 1210 ms 23940 KiB
test_48.txt AC 1214 ms 23916 KiB
test_49.txt AC 1217 ms 24140 KiB
test_50.txt AC 1209 ms 23892 KiB
test_51.txt AC 1204 ms 24020 KiB
test_52.txt AC 1222 ms 24008 KiB
test_53.txt AC 1217 ms 24144 KiB
test_54.txt AC 1220 ms 23880 KiB
test_55.txt AC 1 ms 3536 KiB
test_56.txt AC 643 ms 23704 KiB