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
AC × 25
AC × 50
AC × 75
AC × 100
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