Submission #67424

# Submission time Handle Problem Language Result Execution time Memory
67424 2018-08-14T09:05:37 Z Crown Regions (IOI09_regions) C++14
9 / 100
1766 ms 91596 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));
		}
	}
	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)
		{
			assert(0);
			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:88: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 Correct 21 ms 19064 KB Output is correct
2 Correct 24 ms 19252 KB Output is correct
3 Correct 20 ms 19252 KB Output is correct
4 Correct 25 ms 19260 KB Output is correct
5 Correct 26 ms 19260 KB Output is correct
6 Correct 54 ms 19552 KB Output is correct
7 Correct 65 ms 19724 KB Output is correct
8 Correct 72 ms 19724 KB Output is correct
9 Correct 85 ms 20340 KB Output is correct
10 Runtime error 46 ms 39868 KB Execution killed with signal 11 (could be triggered by violating memory limits)
11 Incorrect 156 ms 40988 KB Expected integer, but "prog1:" found
12 Runtime error 77 ms 42268 KB Execution killed with signal 11 (could be triggered by violating memory limits)
13 Runtime error 71 ms 42268 KB Execution killed with signal 11 (could be triggered by violating memory limits)
14 Incorrect 239 ms 43784 KB Expected integer, but "prog1:" found
15 Incorrect 227 ms 46700 KB Expected integer, but "prog1:" found
# Verdict Execution time Memory Grader output
1 Incorrect 865 ms 48372 KB Expected integer, but "prog1:" found
2 Incorrect 877 ms 48372 KB Expected integer, but "prog1:" found
3 Incorrect 1766 ms 53056 KB Expected integer, but "prog1:" found
4 Runtime error 66 ms 53056 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Runtime error 74 ms 53056 KB Execution killed with signal 11 (could be triggered by violating memory limits)
6 Runtime error 92 ms 53056 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 119 ms 53056 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Runtime error 129 ms 63100 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Runtime error 193 ms 67504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Runtime error 201 ms 78840 KB Execution killed with signal 11 (could be triggered by violating memory limits)
11 Runtime error 245 ms 78840 KB Execution killed with signal 11 (could be triggered by violating memory limits)
12 Runtime error 260 ms 78840 KB Execution killed with signal 11 (could be triggered by violating memory limits)
13 Runtime error 206 ms 78840 KB Execution killed with signal 11 (could be triggered by violating memory limits)
14 Runtime error 235 ms 78840 KB Execution killed with signal 11 (could be triggered by violating memory limits)
15 Runtime error 256 ms 80012 KB Execution killed with signal 11 (could be triggered by violating memory limits)
16 Runtime error 226 ms 91596 KB Execution killed with signal 11 (could be triggered by violating memory limits)
17 Runtime error 248 ms 91596 KB Execution killed with signal 11 (could be triggered by violating memory limits)