Submission #164386

#TimeUsernameProblemLanguageResultExecution timeMemory
164386frodakcinAdriatic (CEOI13_adriatic)C++11
100 / 100
263 ms56868 KiB
#include <cstdio>
#include <cstring>
#include <cassert>

using ll = long long;

void min(int* a, int b) {return (void)(~b&&(b<*a||!~*a)?*a=b:0);}
void max(int* a, int b) {return (void)(*a<b?*a=b:0);}
int min(int a, int b) {return ~b&&b<a?b:a;}
int max(int a, int b) {return a<b?b:a;}
const int MN = 2.5e5 + 100;
const int MX = 2.5e3 + 10;
int N;

int nx[MX], ny[MX];
ll v[MX][MX];
ll f[MN];
struct ISL
{
public:
	int x, y;
	void in(void) {scanf("%d%d", &x, &y);}
	void flip(void) {x = MX - x - 1, y = MX - y - 1;}
};
ISL a[MN];

void solve(void)
{
	memset(nx, -1, sizeof(nx));
	memset(ny, -1, sizeof(ny));
	memset(v, 0, sizeof(v));
	for(int i = 0, x, y;i < N;++i)
		x = a[i].x, y = a[i].y,
		v[x][y] = 1LL,
		min(nx+(y+1), x), max(ny+(x-1), y);
	for(int i = 0;i+1 < MX;++i)
		max(ny+(MX-i-2), ny[MX-i-1]),
			min(nx+(i+1), nx[i]);
	for(int i = 0;i < MX;++i)
	{
		for(int j = MX-2;j >= 0;--j)
			v[i][j] += v[i][j+1];
		if(i)
			for(int j = 0;j < MX;++j)
				v[i][j] += v[i-1][j];
	}
	for(int i = 0;i < MX;++i)
		for(int j = MX-1;j >= 0;--j)
			if(v[i][j])
				v[i][j] += v[min(i, nx[j])][max(j, ny[i])];
	for(int i = 0;i < N;++i)
		f[i] += v[a[i].x][a[i].y] - 1;
}

int main(void)
{
	scanf("%d", &N);
	for(int i = 0;i < N;++i)
		a[i].in();
	solve();
	for(int i = 0;i < N;++i)
		a[i].flip();
	solve();
	for(int i = 0;i < N;++i)
		printf("%lld\n", f[i]+N-1);
	return 0;
}

Compilation message (stderr)

adriatic.cpp: In function 'int main()':
adriatic.cpp:57:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &N);
  ~~~~~^~~~~~~~~~
adriatic.cpp: In member function 'void ISL::in()':
adriatic.cpp:22:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  void in(void) {scanf("%d%d", &x, &y);}
                 ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...