QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#829065#9776. Best Friend, Worst EnemyCrysflyWA 0ms13804kbC++143.2kb2024-12-24 01:13:502024-12-24 01:13:51

Judging History

你现在查看的是最新测评结果

  • [2024-12-24 01:13:51]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:13804kb
  • [2024-12-24 01:13:50]
  • 提交

answer

// what is matter? never mind. 
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,sse4,popcnt,abm,mmx,avx,avx2")
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
#define ll long long
//#define ull unsigned long long
//#define int long long
#define SZ(x) ((int)((x).size()))
#define ALL(x) (x).begin(),(x).end()
using namespace std;
inline int read()
{
	char c=getchar();int x=0;bool f=0;
	for(;!isdigit(c);c=getchar())f^=!(c^45);
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
	return f?-x:x;
}

#define fi first
#define se second
#define pb push_back
#define mkp make_pair
typedef pair<int,int>pii;
typedef vector<int>vi;

#define maxn 400005
#define inf 0x3f3f3f3f

int n,x[maxn],y[maxn];
int mxx[23],mx;

bool vis[maxn];

int nn;

int R;
int rx,ry;
int tx[maxn],ty[maxn],tim[maxn];

map<pii,int>mp;
void add(int u,bool fl=0){
    int xx=x[u]/R,yy=y[u]/R;
    if(mp.count(mkp(xx,yy))){
    	int u=mp[mkp(xx,yy)];
    	if(u!=-1) tim[u]=min(tim[u],nn);
        mp[mkp(xx,yy)]=-1;
    }else{
        mp[mkp(xx,yy)]=u;
        if(!fl) vis[u]=1,tim[u]=n;
    }
}

void rebuild(int qwq){
    R=max(qwq,1);
    mp.clear();
    For(i,1,nn) add(i,1);
    //for(auto [x,y]:mp) if(y!=-1) vis[y]=1;
}

int getmx(int x,int y){
    int mx=0;
    For(s,0,3){
        int sum=((s&1)?(-x):(x))+((s&2)?(-y):y);
        mx=max(mx,sum+mxx[s^3]);
    }
    return mx;
}

int d1[maxn],d2[maxn],res[maxn];
int mxs[maxn],mns[maxn];
int nxt[maxn];
void solve(int u){
    //cout<<"solve "<<u<<"\n";
    int mn=inf,mx=0;
    int n=tim[u];
    For(i,1,n){
        if(i!=u){
            mx=max(mx,abs(x[i]-x[u])+abs(y[i]-y[u]));
            mn=min(mn,max(abs(x[i]-x[u]),abs(y[i]-y[u])));
        }
        mxs[i]=mx;
        mns[i]=mn;
    }
    nxt[n]=n+1;
    Rep(i,n-1,1){
        nxt[i]=nxt[i+1];
        if(mns[i+1]!=mns[i] || mxs[i+1]!=mxs[i]) nxt[i]=i+1;
    }
    For(i,1,n){
        if(i!=u){
            int d1=abs(x[i]-x[u])+abs(y[i]-y[u]);
            int d2=max(abs(x[i]-x[u]),abs(y[i]-y[u]));
            
            int t=max(i,u);
            if(d1==mxs[t] && d2==mns[t]) {
                int t2=nxt[t];
                res[t]++;
                res[t2]--;
            }
        }
    }
}

void work()
{
    cin>>n;
    For(i,1,n)cin>>x[i]>>y[i];
    memset(mxx,-63,sizeof mxx); vis[1]=vis[2]=1;
    For(i,1,n){
        nn=i;
        int lstmx=mx;
        For(s,0,3){
            int sum=((s&1)?(-x[i]):(x[i]))+((s&2)?(-y[i]):y[i]);
            mx=max(mx,sum+mxx[s^3]);
        }
        For(s,0,3){
            int sum=((s&1)?(-x[i]):(x[i]))+((s&2)?(-y[i]):y[i]);
            mxx[s]=max(mxx[s],sum);
        }
        if(i==1) continue;
        int R1=max(mx/4-1,1);
        if(i==2 || R1>R*1.2){
            nn=i-1;rebuild(R1);
			nn=i;add(i);
        }else{
            nn=i;add(i);
        }
    }
    For(i,1,n) if(vis[i]) {
        solve(i);
    }
    For(i,1,n){
        res[i]+=res[i-1];
        cout<<res[i]<<"\n";
    }
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T=1;
    while(T--)work();
    return 0;
}
/*

*/

詳細信息

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 13804kb

input:

2
1 5
1 10

output:

0
1

result:

wrong answer 2nd numbers differ - expected: '2', found: '1'