Submission #84074
Source Code Expand
#include<cstdio> #include<algorithm> #include<vector> using namespace std; double EPS = 1e-7; struct convex { int N; int x[200000]; int y[200000]; int sum[1<<19]; int sgn; static const int BIT = 1<<18; convex(){ } convex(int N, int* Xs, int sg) { this->N = N; for(int i=0;i<N;i++){ x[i] = Xs[i]; y[i] = -1; } for(int i=0;i<2*BIT;i++) sum[i] = 0; sgn = sg; } void set(int p, int v) { p += BIT; sum[p] = v; p >>= 1; while(p){ sum[p] = sum[p*2] + sum[p*2+1]; p >>= 1; } } int query(int r) { r += BIT; int ret = 0; while(r){ if(r&1) ret += sum[--r]; r >>= 1; } return ret; } int left(int p) { if(p <= 0) return -1; int bas = query(p); if(bas == 0) return -1; int ret = 1; while(ret < BIT){ if(bas > sum[ret*2]){ bas -= sum[ret*2]; ret = ret*2+1; }else{ ret = ret*2; } } return ret - BIT; } int right(int p) { if(p == -1) return -1; int bas = query(p+1)+1; int ret = 1; while(ret < BIT){ if(bas > sum[ret*2]){ bas -= sum[ret*2]; ret = ret*2+1; }else{ ret = ret*2; } } if(ret == 2*BIT - 1) return -1; return ret - BIT; } double at(int xv) { int ps = lower_bound(x, x+N, xv) - x; if(query(ps+1) == 0) return -1; if(y[ps] != -1) return y[ps]; int lf = left(ps), rg = right(ps); //printf(" %d %d %d %d\n", ps, query(1), lf, rg); if(lf == -1 || rg == -1) return -1; return y[lf] + (y[rg] - y[lf]) * (double)(x[ps] - x[lf]) / (double)(x[rg] - x[lf]); } void update(int xv, int yv) { double a = at(xv); int ps = lower_bound(x, x+N, xv) - x; //printf("%f %d(%d) %d\n", a, xv, ps, yv); if(a < 0){ set(ps, 1); y[ps] = yv; }else{ if((yv-a)*sgn > 0){ set(ps, 1); y[ps] = yv; }else return; } //printf("(%d)", sgn); //for(int i=0;i<N;i++) printf("%d:%d ", x[i], y[i]); //puts(""); int p1=right(ps); int p2=right(p1); while(p2 != -1){ double nv = y[p1] + (y[p2] - y[p1]) * (double)(x[ps] - x[p1]) / (double)(x[p2] - x[p1]); if((yv - nv)*sgn < EPS) break; set(p1, 0); y[p1] = -1; int tmp = right(p2); p1 = p2; p2 = tmp; } p1=left(ps); p2=left(p1); //printf("%d %d %d %d %d\n", ps, p1, p2, sum[2], query(2)); while(p2 != -1){ double nv = y[p1] + (y[p2] - y[p1]) * (double)(x[ps] - x[p1]) / (double)(x[p2] - x[p1]); if((yv - nv)*sgn < EPS) break; set(p1, 0); y[p1] = -1; int tmp = left(p2); p1 = p2; p2 = tmp; } } }; convex upp, low; int N; bool T[200000]; int X[200000], Y[200000]; char S[50]; int x, y; int Xs[200000], Xl; int main() { for(;~scanf("%d", &N);){ for(int i=0;i<N;i++){ scanf("%s%d%d", S, &x, &y); T[i] = S[0]=='T' ? false : true; X[i] = x; Y[i] = y; Xs[i] = x; } sort(Xs, Xs+N); Xl = unique(Xs, Xs+N) - Xs; upp = convex(Xl, Xs, 1); low = convex(Xl, Xs, -1); for(int i=0;i<N;i++){ if(T[i]){ upp.update(X[i], Y[i]); low.update(X[i], Y[i]); }else{ double upv = upp.at(X[i]), lwv = low.at(X[i]); //printf("%f %f\n", lwv, upv); if(upv > 0){ if(lwv-EPS < Y[i] && Y[i] < upv+EPS){ puts("DANGER"); continue; } } puts("SAFE"); } } } return 0; }
Submission Info
Submission Time | |
---|---|
Task | C - 泥棒 |
User | semiexp |
Language | C++ (G++ 4.6.4) |
Score | 300 |
Code Size | 3377 Byte |
Status | AC |
Exec Time | 670 ms |
Memory | 18104 KB |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:166:29: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
Judge Result
Set Name | Subtask1 | Subtask2 | Subtask3 | Subtask4 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 50 / 50 | 50 / 50 | 50 / 50 | 150 / 150 | ||||||||
Status |
|
|
|
|
Set Name | Test Cases |
---|---|
Subtask1 | 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt |
Subtask2 | 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt |
Subtask3 | 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt, 31_rand00.txt, 31_rand01.txt, 31_rand02.txt, 31_rand03.txt, 31_rand04.txt, 31_rand05.txt, 31_rand06.txt, 31_rand07.txt, 31_rand08.txt, 31_rand09.txt, 31_rand10.txt, 31_rand11.txt, 31_rand12.txt, 31_rand13.txt, 31_rand14.txt, 31_rand15.txt, 31_rand16.txt, 31_rand17.txt, 31_rand18.txt, 31_rand19.txt, 31_rand20.txt, 31_rand21.txt, 31_rand22.txt, 31_rand23.txt, 31_rand24.txt |
Subtask4 | 11_rand00.txt, 11_rand01.txt, 11_rand02.txt, 11_rand03.txt, 11_rand04.txt, 11_rand05.txt, 11_rand06.txt, 11_rand07.txt, 11_rand08.txt, 11_rand09.txt, 11_rand10.txt, 11_rand11.txt, 11_rand12.txt, 11_rand13.txt, 11_rand14.txt, 11_rand15.txt, 11_rand16.txt, 11_rand17.txt, 11_rand18.txt, 11_rand19.txt, 11_rand20.txt, 11_rand21.txt, 11_rand22.txt, 11_rand23.txt, 11_rand24.txt, 21_rand00.txt, 21_rand01.txt, 21_rand02.txt, 21_rand03.txt, 21_rand04.txt, 21_rand05.txt, 21_rand06.txt, 21_rand07.txt, 21_rand08.txt, 21_rand09.txt, 21_rand10.txt, 21_rand11.txt, 21_rand12.txt, 21_rand13.txt, 21_rand14.txt, 21_rand15.txt, 21_rand16.txt, 21_rand17.txt, 21_rand18.txt, 21_rand19.txt, 21_rand20.txt, 21_rand21.txt, 21_rand22.txt, 21_rand23.txt, 21_rand24.txt, 31_rand00.txt, 31_rand01.txt, 31_rand02.txt, 31_rand03.txt, 31_rand04.txt, 31_rand05.txt, 31_rand06.txt, 31_rand07.txt, 31_rand08.txt, 31_rand09.txt, 31_rand10.txt, 31_rand11.txt, 31_rand12.txt, 31_rand13.txt, 31_rand14.txt, 31_rand15.txt, 31_rand16.txt, 31_rand17.txt, 31_rand18.txt, 31_rand19.txt, 31_rand20.txt, 31_rand21.txt, 31_rand22.txt, 31_rand23.txt, 31_rand24.txt, 41_rand00.txt, 41_rand01.txt, 41_rand02.txt, 41_rand03.txt, 41_rand04.txt, 41_rand05.txt, 41_rand06.txt, 41_rand07.txt, 41_rand08.txt, 41_rand09.txt, 41_rand10.txt, 41_rand11.txt, 41_rand12.txt, 41_rand13.txt, 41_rand14.txt, 41_rand15.txt, 41_rand16.txt, 41_rand17.txt, 41_rand18.txt, 41_rand19.txt, 41_rand20.txt, 41_rand21.txt, 41_rand22.txt, 41_rand23.txt, 41_rand24.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
11_rand00.txt | AC | 41 ms | 11952 KB |
11_rand01.txt | AC | 40 ms | 11956 KB |
11_rand02.txt | AC | 41 ms | 11960 KB |
11_rand03.txt | AC | 38 ms | 11956 KB |
11_rand04.txt | AC | 40 ms | 11964 KB |
11_rand05.txt | AC | 42 ms | 11928 KB |
11_rand06.txt | AC | 40 ms | 11960 KB |
11_rand07.txt | AC | 42 ms | 11964 KB |
11_rand08.txt | AC | 39 ms | 11948 KB |
11_rand09.txt | AC | 40 ms | 12084 KB |
11_rand10.txt | AC | 40 ms | 11956 KB |
11_rand11.txt | AC | 40 ms | 11956 KB |
11_rand12.txt | AC | 36 ms | 11948 KB |
11_rand13.txt | AC | 40 ms | 11912 KB |
11_rand14.txt | AC | 40 ms | 11880 KB |
11_rand15.txt | AC | 42 ms | 11964 KB |
11_rand16.txt | AC | 38 ms | 11956 KB |
11_rand17.txt | AC | 41 ms | 11964 KB |
11_rand18.txt | AC | 39 ms | 11960 KB |
11_rand19.txt | AC | 40 ms | 11948 KB |
11_rand20.txt | AC | 36 ms | 11948 KB |
11_rand21.txt | AC | 38 ms | 11964 KB |
11_rand22.txt | AC | 39 ms | 11956 KB |
11_rand23.txt | AC | 39 ms | 11960 KB |
11_rand24.txt | AC | 41 ms | 11956 KB |
21_rand00.txt | AC | 38 ms | 11948 KB |
21_rand01.txt | AC | 39 ms | 11960 KB |
21_rand02.txt | AC | 38 ms | 11952 KB |
21_rand03.txt | AC | 38 ms | 12048 KB |
21_rand04.txt | AC | 37 ms | 11948 KB |
21_rand05.txt | AC | 39 ms | 11960 KB |
21_rand06.txt | AC | 40 ms | 11960 KB |
21_rand07.txt | AC | 38 ms | 11924 KB |
21_rand08.txt | AC | 39 ms | 11956 KB |
21_rand09.txt | AC | 41 ms | 11956 KB |
21_rand10.txt | AC | 37 ms | 11960 KB |
21_rand11.txt | AC | 39 ms | 11956 KB |
21_rand12.txt | AC | 41 ms | 11960 KB |
21_rand13.txt | AC | 40 ms | 11948 KB |
21_rand14.txt | AC | 39 ms | 11960 KB |
21_rand15.txt | AC | 39 ms | 11956 KB |
21_rand16.txt | AC | 41 ms | 11960 KB |
21_rand17.txt | AC | 43 ms | 11960 KB |
21_rand18.txt | AC | 40 ms | 11952 KB |
21_rand19.txt | AC | 40 ms | 11960 KB |
21_rand20.txt | AC | 38 ms | 11968 KB |
21_rand21.txt | AC | 40 ms | 11952 KB |
21_rand22.txt | AC | 37 ms | 11900 KB |
21_rand23.txt | AC | 38 ms | 11944 KB |
21_rand24.txt | AC | 41 ms | 11968 KB |
31_rand00.txt | AC | 37 ms | 11944 KB |
31_rand01.txt | AC | 40 ms | 11952 KB |
31_rand02.txt | AC | 45 ms | 11960 KB |
31_rand03.txt | AC | 42 ms | 11968 KB |
31_rand04.txt | AC | 37 ms | 11952 KB |
31_rand05.txt | AC | 41 ms | 11968 KB |
31_rand06.txt | AC | 41 ms | 11956 KB |
31_rand07.txt | AC | 39 ms | 11956 KB |
31_rand08.txt | AC | 41 ms | 11956 KB |
31_rand09.txt | AC | 42 ms | 11956 KB |
31_rand10.txt | AC | 40 ms | 11960 KB |
31_rand11.txt | AC | 44 ms | 12024 KB |
31_rand12.txt | AC | 42 ms | 11960 KB |
31_rand13.txt | AC | 41 ms | 11952 KB |
31_rand14.txt | AC | 41 ms | 11960 KB |
31_rand15.txt | AC | 42 ms | 11964 KB |
31_rand16.txt | AC | 43 ms | 11956 KB |
31_rand17.txt | AC | 42 ms | 11956 KB |
31_rand18.txt | AC | 38 ms | 12092 KB |
31_rand19.txt | AC | 41 ms | 11956 KB |
31_rand20.txt | AC | 40 ms | 11952 KB |
31_rand21.txt | AC | 41 ms | 11964 KB |
31_rand22.txt | AC | 42 ms | 11964 KB |
31_rand23.txt | AC | 42 ms | 11960 KB |
31_rand24.txt | AC | 41 ms | 11956 KB |
41_rand00.txt | AC | 437 ms | 16952 KB |
41_rand01.txt | AC | 233 ms | 14648 KB |
41_rand02.txt | AC | 402 ms | 16868 KB |
41_rand03.txt | AC | 286 ms | 15152 KB |
41_rand04.txt | AC | 305 ms | 15408 KB |
41_rand05.txt | AC | 215 ms | 14140 KB |
41_rand06.txt | AC | 47 ms | 12092 KB |
41_rand07.txt | AC | 319 ms | 15916 KB |
41_rand08.txt | AC | 219 ms | 14388 KB |
41_rand09.txt | AC | 298 ms | 15536 KB |
41_rand10.txt | AC | 488 ms | 17588 KB |
41_rand11.txt | AC | 437 ms | 16952 KB |
41_rand12.txt | AC | 303 ms | 15752 KB |
41_rand13.txt | AC | 332 ms | 16180 KB |
41_rand14.txt | AC | 198 ms | 14648 KB |
41_rand15.txt | AC | 141 ms | 13624 KB |
41_rand16.txt | AC | 415 ms | 16692 KB |
41_rand17.txt | AC | 266 ms | 14908 KB |
41_rand18.txt | AC | 40 ms | 11964 KB |
41_rand19.txt | AC | 39 ms | 12048 KB |
41_rand20.txt | AC | 40 ms | 11960 KB |
41_rand21.txt | AC | 39 ms | 11960 KB |
41_rand22.txt | AC | 41 ms | 11956 KB |
41_rand23.txt | AC | 633 ms | 18104 KB |
41_rand24.txt | AC | 670 ms | 18100 KB |