Submission #54050573


Source Code Expand

// LUOGU_RID: 160846261
#include<bits/stdc++.h>
#define Gc() getchar()
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
#define eb emplace_back
#define all(x) x.begin(),x.end()
using namespace std;using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned long long;using pii=pair<int,int>;
const int N=2e5+5,M=100+5,K=1000+5,mod=1e9+7,Mod=mod-1;const lb eps=1e-16;const ll INF=1e18+7;mt19937 rnd(time(0));
#define Tp template<typename T>
#define Ts template<typename T,typename... Ar>
namespace Debug{
	Tp void _debug(char* f,T t){cerr<<f<<'='<<t<<endl;}
	Ts void _debug(char* f,T x,Ar... y){while(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);}
	#ifdef LOCAL
	#define gdb(...) _debug((char*)#__VA_ARGS__,__VA_ARGS__)
	#else 
	#define gdb(...) void()
	#endif
}using namespace Debug;
int n,ns[N],nh;pii A[N];
struct node{
	int x,y;ll dp;
	void trans(node B){
		dp=min(dp,B.dp+abs(x-B.x)+abs(y-B.y));
	}
};
int pre[N],nxt[N];
using info=pair<node,node>;
map<pii,info> f;
info calc(int l,int r,int x,int y){
	gdb(l,r,x,y);
	if(f.count(make_pair(l,r))) return f[make_pair(l,r)];
	node &ls=f[make_pair(l,r)].fi,&rs=f[make_pair(l,r)].se;
	ls=(node){A[l].fi,ns[A[l].se],INF};rs=(node){A[r].fi,ns[A[r].se],INF};
	if(l^1&&(A[l-1].se==x-1||A[l-1].se==y+1)){
		node w=calc(pre[l-1],r,min(x,A[pre[l-1]].se),max(y,A[pre[l-1]].se)).fi;
		w.dp-=l-pre[l-1];
		ls.trans(w);rs.trans(w);
	}
	if(r^n&&A[r+1].se==x-1||A[r+1].se==y+1){
		node w=calc(l,nxt[r+1],min(x,A[nxt[r+1]].se),max(y,A[nxt[r+1]].se)).se;
		w.dp-=nxt[r+1]-r;
		ls.trans(w);rs.trans(w);
	}
	if(ls.dp==INF&&rs.dp==INF) ls.dp=rs.dp=0;
	return make_pair(ls,rs);
}
void Solve(){
	int i,j;scanf("%d",&n);
	map<int,int> f;static ll ans[N];
	for(i=1;i<=n;i++) scanf("%d%d",&A[i].fi,&A[i].se),f[A[i].fi]=i,ns[++nh]=A[i].se;
	sort(A+1,A+n+1);sort(ns+1,ns+nh+1);
	for(i=1;i<=n;i++) gdb(A[i].fi,A[i].se),A[i].se=LB(ns+1,ns+nh+1,A[i].se)-ns;
	for(i=1;i<=n;i++) pre[i]=(abs(A[i].se-A[i-1].se)==1&&i^1?pre[i-1]:i),gdb(pre[i]);
	for(i=n;i;i--) nxt[i]=(abs(A[i].se-A[i+1].se)==1&&i^n?nxt[i+1]:i),gdb(nxt[i]);
	for(i=1;i<=n;i++) ans[f[A[i].fi]]=calc(i,i,A[i].se,A[i].se).fi.dp;
	for(i=1;i<=n;i++) printf("%lld\n",ans[i]);
}
int main(){
	int t=1;
	// scanf("%d",&t);
	while(t--) Solve();
	cerr<<clock()*1.0/CLOCKS_PER_SEC<<'\n';
}

Submission Info

Submission Time
Task F - Rooks
User fangxintong
Language C++ 20 (gcc 12.2)
Score 2200
Code Size 2491 Byte
Status AC
Exec Time 507 ms
Memory 77548 KiB

Compile Error

Main.cpp: In function ‘info calc(int, int, int, int)’:
Main.cpp:48:15: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
   48 |         if(r^n&&A[r+1].se==x-1||A[r+1].se==y+1){
      |            ~~~^~~~~~~~~~~~~~~~
Main.cpp: In function ‘void Solve()’:
Main.cpp:57:15: warning: unused variable ‘j’ [-Wunused-variable]
   57 |         int i,j;scanf("%d",&n);
      |               ^
Main.cpp:57:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   57 |         int i,j;scanf("%d",&n);
      |                 ~~~~~^~~~~~~~~
Main.cpp:59:32: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   59 |         for(i=1;i<=n;i++) scanf("%d%d",&A[i].fi,&A[i].se),f[A[i].fi]=i,ns[++nh]=A[i].se;
      |                           ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 2200 / 2200
Status
AC × 3
AC × 23
Set Name Test Cases
Sample s1.txt, s2.txt, s3.txt
All 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, s1.txt, s2.txt, s3.txt
Case Name Status Exec Time Memory
001.txt AC 1 ms 4048 KiB
002.txt AC 1 ms 4076 KiB
003.txt AC 1 ms 4088 KiB
004.txt AC 3 ms 4480 KiB
005.txt AC 12 ms 6832 KiB
006.txt AC 75 ms 14836 KiB
007.txt AC 236 ms 57724 KiB
008.txt AC 507 ms 65552 KiB
009.txt AC 432 ms 65640 KiB
010.txt AC 160 ms 33396 KiB
011.txt AC 349 ms 77548 KiB
012.txt AC 436 ms 69828 KiB
013.txt AC 373 ms 65944 KiB
014.txt AC 321 ms 61964 KiB
015.txt AC 331 ms 58084 KiB
016.txt AC 330 ms 57320 KiB
017.txt AC 308 ms 53712 KiB
018.txt AC 481 ms 65776 KiB
019.txt AC 400 ms 65540 KiB
020.txt AC 447 ms 65552 KiB
s1.txt AC 1 ms 3796 KiB
s2.txt AC 1 ms 4012 KiB
s3.txt AC 1 ms 4008 KiB