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 |
|
|
| 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 |