Submission #8526354
Source Code Expand
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<cstring>
#define P pair<int,int>
#define MP make_pair
#define fi first
#define se second
#define N 200010
using namespace std;
int nxt[N<<2],to[N<<2],head[N],cnt;
void add(int u,int v)
{
nxt[++cnt]=head[u];
to[cnt]=v;
head[u]=cnt;
}
int dfn[N],low[N],id[N],ids,totn;
stack<int>s;
void tarjan(int u)
{
dfn[u]=low[u]=++ids;
s.push(u);
for(int i=head[u];i;i=nxt[i])
{
int v=to[i];
if(!dfn[v])
{
int v=to[i];
tarjan(v);
low[u]=min(low[v],low[u]);
}
else if(!id[v]) low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
int iu=0;
totn++;
do
{
id[iu=s.top()]=totn;
s.pop();
}while(iu!=u);
}
}
P num[N];
int tree[N],tids;
void build(int u,int l,int r)
{
if(l==r){tree[u]=num[l].se;return;}
int mid=(l+r)>>1;
tree[u]=++tids;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
add(tree[u],tree[u<<1]);
add(tree[u],tree[u<<1|1]);
}
void insert(int u,int l,int r,int L,int R,int id)
{
if(L>r || R<l) return;
if(L<=l && r<=R)
{
add(id,tree[u]);
return ;
}
int mid=(l+r)>>1;
if(L<=mid) insert(u<<1,l,mid,L,R,id);
if(R>mid) insert(u<<1|1,mid+1,r,L,R,id);
}
int n;
int lim[2][N];
void clear()
{
memset(head,0,sizeof(head));
cnt=ids=totn=0;tids=2*n;
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(id,0,sizeof(id));
}
bool check(int x)
{
clear();
build(1,1,2*n);
for(int i=1;i<=n;i++)
{
for(int o=0;o<=1;o++)
{
int l=lower_bound(num+1,num+2*n+1,MP(lim[o][i]-x+1,0))-num;
int r=upper_bound(num+1,num+2*n+1,MP(lim[o][i]+x-1,2*n+1))-num-1;
int u=lower_bound(num+1,num+2*n+1,MP(lim[o][i],(o^1)*n+i))-num;
int ui=o*n+i;
insert(1,1,2*n,l,u-1,ui);
insert(1,1,2*n,u+1,r,ui);
}
}
while(!s.empty()) s.pop();
for(int i=1;i<=tids;i++)
if(!dfn[i]) tarjan(i);
for(int i=1;i<=n;i++)
if(id[i]==id[i+n]) return false;
return true;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d",&lim[0][i],&lim[1][i]);
for(int i=1;i<=n;i++)
{
num[i*2-1]=MP(lim[0][i],i+n);
num[i*2]=MP(lim[1][i],i);
}
sort(num+1,num+n*2+1);
int l=0,r=1000000000;
while(l<r)
{
int mid=(l+r)>>1;
if(check(mid)) l=mid+1;
else r=mid-1;
}
if(!check(l)) l--;
printf("%d\n",l);
return 0;
}
Submission Info
| Submission Time |
|
| Task |
F - Flags |
| User |
Flying2018 |
| Language |
C++ (GCC 5.4.1) |
| Score |
1200 |
| Code Size |
2404 Byte |
| Status |
AC |
| Exec Time |
436 ms |
| Memory |
13312 KiB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:107:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&n);
^
./Main.cpp:108:59: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for(int i=1;i<=n;i++) scanf("%d%d",&lim[0][i],&lim[1][i]);
^
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
1200 / 1200 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_example_01.txt, 00_example_02.txt, 00_example_03.txt |
| All |
00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_example_01.txt |
AC |
8 ms |
8448 KiB |
| 00_example_02.txt |
AC |
8 ms |
8448 KiB |
| 00_example_03.txt |
AC |
8 ms |
8448 KiB |
| 01.txt |
AC |
18 ms |
8576 KiB |
| 02.txt |
AC |
11 ms |
8448 KiB |
| 03.txt |
AC |
9 ms |
8448 KiB |
| 04.txt |
AC |
9 ms |
8448 KiB |
| 05.txt |
AC |
9 ms |
8448 KiB |
| 06.txt |
AC |
375 ms |
12416 KiB |
| 07.txt |
AC |
375 ms |
12416 KiB |
| 08.txt |
AC |
376 ms |
12416 KiB |
| 09.txt |
AC |
18 ms |
8576 KiB |
| 10.txt |
AC |
11 ms |
8448 KiB |
| 11.txt |
AC |
8 ms |
8448 KiB |
| 12.txt |
AC |
9 ms |
8448 KiB |
| 13.txt |
AC |
9 ms |
8448 KiB |
| 14.txt |
AC |
370 ms |
12416 KiB |
| 15.txt |
AC |
369 ms |
12288 KiB |
| 16.txt |
AC |
370 ms |
12376 KiB |
| 17.txt |
AC |
18 ms |
8576 KiB |
| 18.txt |
AC |
11 ms |
8448 KiB |
| 19.txt |
AC |
384 ms |
12416 KiB |
| 20.txt |
AC |
382 ms |
12416 KiB |
| 21.txt |
AC |
436 ms |
12416 KiB |
| 22.txt |
AC |
436 ms |
12416 KiB |
| 23.txt |
AC |
431 ms |
13312 KiB |
| 24.txt |
AC |
340 ms |
13184 KiB |
| 25.txt |
AC |
338 ms |
12928 KiB |
| 26.txt |
AC |
377 ms |
12544 KiB |
| 27.txt |
AC |
8 ms |
8448 KiB |