Submission #67420

# Submission time Handle Problem Language Result Execution time Memory
67420 2018-08-14T08:57:02 Z Crown Regions (IOI09_regions) C++14
0 / 100
1998 ms 86500 KB
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define pb push_back
typedef pair<int, int> ii;
typedef long long ll;

#define lim 316

const int maxn = 2e5+5;
const int maxr = 3e4+5;

vector<int> adj[maxn];
int re[maxn];
int num[maxn];
int cnt[maxn];
int cur = 0;

int n, r, q;

vector<int> regions[maxn];
vector<int> blocks[maxn];
vector< ii > res[maxn];

void dfs(int u, int p)
{
	cur++;
	num[u] = cur;
	cnt[u] = 1;
	for(auto v : adj[u])
	{
		if(v == p) continue;
		dfs(v, u);
		cnt[u] += cnt[v];
	}
}

bool cmp(int a, int b)
{
	if(abs(a) != abs(b)) return abs(a)< abs(b);
	return a< b;
}

map<ii, ll> cache;

int main()
{
	scanf("%d %d %d", &n, &r, &q);
	scanf("%d", re+1);
	for(int i = 2; i<= n; i++)
	{
		int x;
		scanf("%d %d", &x, &re[i]);
		adj[x].pb(i);
	}
	dfs(1, 0);
	for(int i = 1; i<= n; i++)
	{
		regions[re[i]].pb(num[i]);
		blocks[re[i]].pb(num[i]);
		blocks[re[i]].pb(-num[i]-cnt[i]);
	}
	for(int i = 1; i<= r; i++)
	{
		sort(regions[i].begin(), regions[i].end());
		sort(blocks[i].begin(), blocks[i].end(), cmp);
		vector< ii > tmp;
		for(int j = 0; j< (int) blocks[i].size(); j++)
		{
			if(tmp.empty() || abs(blocks[i][j]) != tmp.back().X)
			{
				tmp.pb(ii(abs(blocks[i][j]), blocks[i][j]>0?1:-1));
			}
			else
			{
				tmp.back().Y += (blocks[i][j]>0?1:-1);
			}
		}
		if(!tmp.empty()) res[i].pb(tmp[0]);
		for(int j = 1; j< (int) tmp.size(); j++)
		{
			res[i].pb(ii(tmp[j].X, res[i].back().Y+tmp[j].Y));
		}
		assert(res[i].back().Y == 0);
	}
	while(q--)
	{
		int r1, r2; scanf("%d %d", &r1, &r2);
		if(cache.find(ii(r1, r2)) != cache.end())
		{
			printf("%lld\n", cache[ii(r1, r2)]);
			fflush(stdout);
			continue;
		}
		ll ret = 0;
		if(r1>= lim || r2>= lim)
		{
			if(r1> r2)
			{
				for(auto x : regions[r2])
				{
					int ind = upper_bound(res[r1].begin(), res[r1].end(), ii(x, 1e9))-res[r1].begin()-1;
					if(ind< 0) continue;
					ret += res[r1][ind].Y;
				}
			}
			else
			{
				for(int i = 1; i< (int) res[r1].size(); i++)
				{
					int lb = res[r1][i-1].X;
					int rb = res[r1][i].X-1;
					int cnt = res[r1][i-1].Y;
					int cnt2 = lower_bound(regions[r2].begin(), regions[r2].end(), rb)-lower_bound(regions[r2].begin(), regions[r2].end(), lb-1);
					ret += 1LL*cnt*cnt2;
				}
			}
		}
		else
		{
			int pt = 0;
			for(auto x : regions[r2])
			{
				while(pt< (int) res[r1].size() && res[r1][pt].X<= x) pt++;
				if(pt) ret += res[r1][pt-1].Y;
			}
		}
		cache[ii(r1, r2)] = ret;
		printf("%lld\n", ret);
		fflush(stdout);
	}
}

Compilation message

regions.cpp: In function 'int main()':
regions.cpp:49:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d", &n, &r, &q);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:50:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", re+1);
  ~~~~~^~~~~~~~~~~~
regions.cpp:54:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &x, &re[i]);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~
regions.cpp:89:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int r1, r2; scanf("%d %d", &r1, &r2);
               ~~~~~^~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Runtime error 41 ms 38068 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Runtime error 44 ms 38280 KB Execution killed with signal 11 (could be triggered by violating memory limits)
3 Runtime error 46 ms 38280 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Incorrect 23 ms 38500 KB Unexpected end of file - int32 expected
5 Incorrect 27 ms 38500 KB Unexpected end of file - int32 expected
6 Runtime error 54 ms 38500 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Incorrect 67 ms 38772 KB Unexpected end of file - int32 expected
8 Incorrect 74 ms 38856 KB Unexpected end of file - int32 expected
9 Incorrect 77 ms 39540 KB Unexpected end of file - int32 expected
10 Incorrect 83 ms 39852 KB Unexpected end of file - int32 expected
11 Incorrect 122 ms 40300 KB Unexpected end of file - int32 expected
12 Incorrect 148 ms 41152 KB Unexpected end of file - int32 expected
13 Incorrect 215 ms 41152 KB Unexpected end of file - int32 expected
14 Incorrect 164 ms 41884 KB Unexpected end of file - int32 expected
15 Incorrect 264 ms 44992 KB Unexpected end of file - int32 expected
# Verdict Execution time Memory Grader output
1 Incorrect 1022 ms 46544 KB Unexpected end of file - int32 expected
2 Incorrect 1241 ms 46544 KB Unexpected end of file - int32 expected
3 Incorrect 1998 ms 51300 KB Unexpected end of file - int32 expected
4 Runtime error 60 ms 51300 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Runtime error 72 ms 51300 KB Execution killed with signal 11 (could be triggered by violating memory limits)
6 Runtime error 75 ms 51300 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 96 ms 51300 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Runtime error 117 ms 62596 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Runtime error 147 ms 62596 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Runtime error 168 ms 71396 KB Execution killed with signal 11 (could be triggered by violating memory limits)
11 Runtime error 179 ms 71396 KB Execution killed with signal 11 (could be triggered by violating memory limits)
12 Runtime error 206 ms 71396 KB Execution killed with signal 11 (could be triggered by violating memory limits)
13 Runtime error 166 ms 71396 KB Execution killed with signal 11 (could be triggered by violating memory limits)
14 Runtime error 216 ms 71396 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Runtime error 208 ms 76064 KB Execution killed with signal 11 (could be triggered by violating memory limits)
16 Runtime error 182 ms 86500 KB Execution killed with signal 11 (could be triggered by violating memory limits)
17 Runtime error 170 ms 86500 KB Execution killed with signal 11 (could be triggered by violating memory limits)