QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#748491#9161. Naval battlemiaomiaomiaowu#6 2ms12296kbC++207.5kb2024-11-14 20:32:422024-11-14 20:32:43

Judging History

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

  • [2024-11-14 20:32:43]
  • 评测
  • 测评结果:6
  • 用时:2ms
  • 内存:12296kb
  • [2024-11-14 20:32:42]
  • 提交

answer

#include<bits/stdc++.h>
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define MP make_pair
#define pii pair<int,int>
const double PI=acos(-1.0);
template <class Miaowu>
inline void in(Miaowu &x){
    char c;x=0;bool f=0;
    for(c=getchar();c<'0'||c>'9';c=getchar())f|=c=='-';
    for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);
    x=f?-x:x;
}
struct fastmod{
    typedef unsigned long long u64;
    typedef __uint128_t u128;
    int m;u64 b;
    fastmod(int m):m(m),b(((u128)1<<64)/m){}
    int reduce(u64 a){
        u64 q=((u128)a*b)>>64;
        int r=a-q*m;
        return r<m?r:r-m;
    }
}z(2);
const int N=2e5+5;
const int M=2e7+5;
int n,numx[N],numy[N],num1[N],num2[N],num3[N],num4[N];
bool ban[N];
struct Ship{
    int x,y,nx,ny;
    int xx,yy,add,dec;
    char dir;
}a[N];
struct Node{
    int x,y,tim;
    bool operator < (const Node &rhs) const{
        return tim>rhs.tim;
    }
};
priority_queue<Node>Q;
inline int max3(int x,int y,int z){
    return max(max(x,y),z);
}
inline int min3(int x,int y,int z){
    return min(min(x,y),z);
}
struct SGT{
    int rtn[N][3],rts[N][3],rtw[N][3],rte[N][3];
    int ind,pl[M],vl[M],ls[M],rs[M],pr[M],vr[M];
    inline void pu(int u){
        if(!vl[ls[u]])vl[u]=vl[rs[u]],pl[u]=pl[rs[u]];
        else vl[u]=vl[ls[u]],pl[u]=pl[ls[u]];
        if(!vr[rs[u]])vr[u]=vr[ls[u]],pr[u]=pr[ls[u]];
        else vr[u]=vr[rs[u]],pr[u]=pr[rs[u]];
    }
    inline void upd(int &u,int l,int r,int v,int p,int op){
        if(!u)u=++ind;
        if(l==r){
            if(op==1)pl[u]=pr[u]=p,vl[u]=vr[u]=v;
            else pl[u]=pr[u]=vl[u]=vr[u]=0;
            return;
        }
        int mid=l+r>>1;
        mid>=v?upd(ls[u],l,mid,v,p,op):upd(rs[u],mid+1,r,v,p,op);
        pu(u);
    }
    inline pii binary1(int u,int l,int r,int p){
        if(!u)return MP(-1,-1);
        if(r<=p)return pr[u]?MP(pr[u],vr[u]):MP(-1,-1);
        int mid=l+r>>1;
        pii qwq=binary1(rs[u],mid+1,r,p);
        if(qwq.first!=-1)return qwq;
        return binary1(ls[u],l,mid,p);
    }
    inline pii binary2(int u,int l,int r,int p){
        if(!u)return MP(-1,-1);
        if(l>=p)return pl[u]?MP(pl[u],vl[u]):MP(-1,-1);
        int mid=l+r>>1;
        pii qwq=binary2(ls[u],l,mid,p);
        if(qwq.first!=-1)return qwq;
        return binary2(rs[u],mid+1,r,p);
    }
}sgt;
inline void upd(int i,int x){
    if(a[i].dir=='N'){
        sgt.upd(sgt.rtn[a[i].xx][0],1,n,a[i].ny,i,x);
        sgt.upd(sgt.rtn[a[i].dec][1],1,n,a[i].ny,i,x);
        sgt.upd(sgt.rtn[a[i].add][2],1,n,a[i].ny,i,x);
    }
    else if(a[i].dir=='S'){
        sgt.upd(sgt.rts[a[i].xx][0],1,n,a[i].ny,i,x);
        sgt.upd(sgt.rts[a[i].dec][1],1,n,a[i].ny,i,x);
        sgt.upd(sgt.rts[a[i].add][2],1,n,a[i].ny,i,x);
    }
    else if(a[i].dir=='W'){
        sgt.upd(sgt.rtw[a[i].xx][0],1,n,a[i].nx,i,x);
        sgt.upd(sgt.rtw[a[i].dec][1],1,n,a[i].nx,i,x);
        sgt.upd(sgt.rtw[a[i].add][2],1,n,a[i].nx,i,x);
    }
    else{
        sgt.upd(sgt.rte[a[i].xx][0],1,n,a[i].nx,i,x);
        sgt.upd(sgt.rte[a[i].dec][1],1,n,a[i].nx,i,x);
        sgt.upd(sgt.rte[a[i].add][2],1,n,a[i].nx,i,x);
    }
}
inline pii Find(int i){
    pii qwq0,qwq1,qwq2;
    if(a[i].dir=='N'){
        qwq0=sgt.binary1(sgt.rts[a[i].xx][0],1,n,a[i].ny);
        qwq1=sgt.binary1(sgt.rte[a[i].dec][1],1,n,a[i].nx);
        qwq2=sgt.binary2(sgt.rtw[a[i].add][2],1,n,a[i].nx);
        if(qwq0.first!=-1)qwq0.second=(a[i].y-numy[qwq0.second]>>1);
        if(qwq1.first!=-1)qwq1.second=a[i].x-numx[qwq1.second];
        if(qwq2.first!=-1)qwq2.second=numx[qwq2.second]-a[i].x;
    }
    else if(a[i].dir=='S'){
        qwq0=sgt.binary2(sgt.rtn[a[i].xx][0],1,n,a[i].ny);
        qwq1=sgt.binary1(sgt.rte[a[i].add][2],1,n,a[i].nx);
        qwq2=sgt.binary2(sgt.rtw[a[i].dec][1],1,n,a[i].nx);
        if(qwq0.first!=-1)qwq0.second=(numy[qwq0.second]-a[i].y>>1);
        if(qwq1.first!=-1)qwq1.second=a[i].x-numx[qwq1.second];
        if(qwq2.first!=-1)qwq2.second=numx[qwq1.second]-a[i].x;
    }
    else if(a[i].dir=='W'){
        qwq0=sgt.binary1(sgt.rte[a[i].yy][0],1,n,a[i].nx);
        qwq1=sgt.binary2(sgt.rtn[a[i].add][2],1,n,a[i].ny);
        qwq2=sgt.binary1(sgt.rts[a[i].dec][1],1,n,a[i].ny);
        if(qwq0.first!=-1)qwq0.second=(a[i].x-numx[qwq0.second]>>1);
        if(qwq1.first!=-1)qwq1.second=numy[qwq1.second]-a[i].y;
        if(qwq2.first!=-1)qwq2.second=a[i].y-numy[qwq2.second];
    }
    else{
        qwq0=sgt.binary2(sgt.rtw[a[i].yy][0],1,n,a[i].nx);
        qwq1=sgt.binary2(sgt.rtn[a[i].dec][1],1,n,a[i].ny);
        qwq2=sgt.binary1(sgt.rts[a[i].add][2],1,n,a[i].ny);
        if(qwq0.first!=-1)qwq0.second=(numx[qwq0.second]-a[i].x>>1);
        if(qwq1.first!=-1)qwq1.second=numy[qwq1.second]-a[i].y;
        if(qwq2.first!=-1)qwq2.second=a[i].y-numy[qwq2.second];
    }
    if(max3(qwq0.first,qwq1.first,qwq2.first)==-1)return MP(-1,-1);
    if(qwq0.first==-1)qwq0.second=2e9+5;
    if(qwq1.first==-1)qwq1.second=2e9+5;
    if(qwq2.first==-1)qwq2.second=2e9+5;
    int mn=min3(qwq0.second,qwq1.second,qwq2.second);
    if(mn==qwq0.second)return qwq0;
    if(mn==qwq1.second)return qwq1;
    return qwq2;
}
int main(){
    in(n);
    for(int i=1;i<=n;i++){
        in(a[i].x),in(a[i].y);
        char tuu[5];scanf("%s",tuu);a[i].dir=tuu[0];
        numx[++numx[0]]=a[i].x,numy[++numy[0]]=a[i].y;
        num1[++num1[0]]=a[i].x,num2[++num2[0]]=a[i].y;
        num3[++num3[0]]=a[i].x+a[i].y,num4[++num4[0]]=a[i].x-a[i].y;
    }
    stable_sort(num1+1,num1+num1[0]+1);
    num1[0]=unique(num1+1,num1+num1[0]+1)-num1-1;
    stable_sort(num2+1,num2+num2[0]+1);
    num2[0]=unique(num2+1,num2+num2[0]+1)-num2-1;
    stable_sort(num3+1,num3+num3[0]+1);
    num3[0]=unique(num3+1,num3+num3[0]+1)-num3-1;
    stable_sort(num4+1,num4+num4[0]+1);
    num4[0]=unique(num4+1,num4+num4[0]+1)-num4-1;
    stable_sort(numx+1,numx+numx[0]+1);
    stable_sort(numy+1,numy+numy[0]+1);
    numx[0]=unique(numx+1,numx+numx[0]+1)-numx-1;
    numy[0]=unique(numy+1,numy+numy[0]+1)-numy-1;
    for(int i=1;i<=n;i++){
        a[i].nx=lower_bound(numx+1,numx+numx[0]+1,a[i].x)-numx;
        a[i].ny=lower_bound(numy+1,numy+numy[0]+1,a[i].y)-numy;
        a[i].xx=lower_bound(num1+1,num1+num1[0]+1,a[i].x)-num1;
        a[i].yy=lower_bound(num2+1,num2+num2[0]+1,a[i].y)-num2;
        a[i].add=lower_bound(num3+1,num3+num3[0]+1,a[i].x+a[i].y)-num3;
        a[i].dec=lower_bound(num4+1,num4+num4[0]+1,a[i].x-a[i].y)-num4;
    }
    for(int i=1;i<=n;i++)upd(i,1);
    for(int i=1;i<=n;i++){
        pii qwq=Find(i);
        // cout<<"!! "<<i<<' '<<qwq.first<<" "<<qwq.second<<endl;
        if(qwq.first!=-1)Q.push(Node{i,qwq.first,qwq.second});
    }
    while(!Q.empty()){
        vector<Node>vc;
        vc.push_back(Q.top());Q.pop();
        while(!Q.empty()&&Q.top().tim==vc[0].tim){
            vc.push_back(Q.top()),Q.pop();
        }
        set<int>S,SS;
        for(Node xx:vc){
            if(!ban[xx.x]&&!ban[xx.y]){
                SS.insert(xx.x),SS.insert(xx.y);
            }
            else{
                if(!ban[xx.x])S.insert(xx.x);
                if(!ban[xx.y])S.insert(xx.y);
            }
        }
        for(int xx:SS){
            ban[xx]=1,upd(xx,-1);
        }
        for(int xx:S){
            pii qwq=Find(xx);
            if(qwq.first!=-1)Q.push(Node{xx,qwq.first,qwq.second});
        }
    }
    for(int i=1;i<=n;i++)if(!ban[i])printf("%d\n",i);
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 6
Accepted

Test #1:

score: 6
Accepted
time: 2ms
memory: 12016kb

input:

2
675333810 792019962 W
851860476 960355168 W

output:

1
2

result:

ok 

Test #2:

score: 6
Accepted
time: 2ms
memory: 12188kb

input:

2
714148610 688520844 W
359519570 789553998 S

output:

1
2

result:

ok 

Test #3:

score: 6
Accepted
time: 0ms
memory: 12240kb

input:

2
743286406 87591094 E
108453484 326740470 S

output:

1
2

result:

ok 

Test #4:

score: 6
Accepted
time: 2ms
memory: 12104kb

input:

2
629499666 659260200 W
391550936 897208930 N

output:


result:

ok 

Test #5:

score: 6
Accepted
time: 2ms
memory: 11916kb

input:

2
509095668 374922996 W
325521434 191348762 S

output:


result:

ok 

Test #6:

score: 6
Accepted
time: 0ms
memory: 11848kb

input:

2
357656592 713571312 E
456601638 614626266 S

output:


result:

ok 

Test #7:

score: 6
Accepted
time: 2ms
memory: 12140kb

input:

2
353512742 374956722 W
265604916 462864548 N

output:


result:

ok 

Test #8:

score: 6
Accepted
time: 2ms
memory: 12168kb

input:

2
253519292 302668732 E
436627396 119560628 S

output:


result:

ok 

Test #9:

score: 6
Accepted
time: 0ms
memory: 12048kb

input:

2
741954822 709863076 W
516385128 484293380 S

output:

1
2

result:

ok 

Test #10:

score: 6
Accepted
time: 0ms
memory: 12044kb

input:

2
268851874 524109226 E
503673708 758931058 N

output:

1
2

result:

ok 

Test #11:

score: 6
Accepted
time: 1ms
memory: 12040kb

input:

2
629380956 395789270 S
557401140 467769088 E

output:

1
2

result:

ok 

Test #12:

score: 6
Accepted
time: 1ms
memory: 12296kb

input:

2
606361496 587557658 N
667076156 526843000 W

output:

1
2

result:

ok 

Test #13:

score: 6
Accepted
time: 1ms
memory: 11976kb

input:

2
270428340 629167054 N
270428342 179345630 S

output:

1
2

result:

ok 

Subtask #2:

score: 0
Wrong Answer

Test #14:

score: 12
Accepted
time: 1ms
memory: 11868kb

input:

100
32 46 N
8 24 W
74 86 W
2 76 N
90 70 N
34 74 N
4 68 N
42 26 N
66 94 N
28 40 W
96 12 W
82 78 W
54 24 N
36 42 W
92 68 W
0 26 N
14 54 N
94 66 N
26 52 N
66 12 W
72 6 W
64 96 W
6 20 N
4 22 W
26 42 N
40 28 W
70 76 N
18 60 N
62 16 N
30 48 N
36 36 W
42 36 W
52 94 N
62 98 N
0 78 N
70 2 W
28 50 N
80 80 W
8...

output:


result:

ok 

Test #15:

score: 12
Accepted
time: 0ms
memory: 11876kb

input:

100
70 62 N
56 42 N
42 56 W
64 4 N
50 48 W
56 76 N
78 20 W
96 96 W
60 72 N
44 24 N
2 10 N
52 80 W
38 30 N
94 4 W
58 74 W
68 30 W
54 76 N
0 68 N
36 32 N
10 58 W
70 60 W
86 92 N
100 78 W
2 66 W
20 48 N
16 52 N
8 60 N
98 94 N
86 46 W
74 24 W
26 42 W
66 66 W
28 40 W
56 12 W
90 42 W
8 4 W
76 30 W
78 54 W...

output:


result:

ok 

Test #16:

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

input:

100
36 44 E
96 66 E
28 20 E
36 2 E
32 64 W
76 58 E
82 20 E
76 50 E
22 48 W
38 52 E
90 16 N
22 12 W
64 82 S
84 14 E
92 52 E
76 36 E
72 52 N
100 58 S
82 4 E
2 0 N
90 100 E
68 8 S
24 36 S
80 86 W
72 56 W
8 66 W
84 18 S
18 60 N
64 96 E
2 76 S
74 90 E
64 0 S
12 10 S
56 40 S
40 6 S
2 4 S
74 2 S
90 80 N
2 ...

output:

1
2
3
4
5
6
8
10
11
12
13
14
15
19
20
21
23
26
28
29
30
32
33
35
36
37
38
39
40
41
42
45
46
47
48
49
50
51
53
54
56
58
59
61
62
63
64
69
70
71
73
74
76
77
78
79
81
83
84
85
87
89
91
92
93
98

result:

wrong answer 

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Time Limit Exceeded

Test #58:

score: 0
Time Limit Exceeded

input:

200000
526715640 430855204 E
731546662 226024182 S
254814720 702756124 E
227354364 730216480 S
764250602 193320242 S
150102088 807468756 E
204858572 752712272 S
635512190 322058654 E
403910248 553660596 S
257917918 4587926 S
949444340 8126504 S
907805098 49765746 S
553836306 403734538 S
40977864 617...

output:


result:


Subtask #7:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%