Submission #107475

# Submission time Handle Problem Language Result Execution time Memory
107475 2019-04-24T17:03:43 Z wilwxk Ball Machine (BOI13_ballmachine) C++11
16.2271 / 100
241 ms 23536 KB
#include <bits/stdc++.h>
using namespace std;

struct node {
	int mn, mni, cnt;
};

const int MAXN=1e5+5;
vector<int> g[MAXN], ord;
priority_queue<int> pq;
node seg[MAXN*4];
int indt[MAXN], prof[MAXN];
int menor[MAXN];
int n, q;

bool cmp(int a, int b) {
	return menor[a]<menor[b];
}

void predfs(int cur) {
	menor[cur]=cur;
	for(auto viz : g[cur]) {
		predfs(viz);
		menor[cur]=min(menor[cur], menor[viz]);
	}
}
void dfs(int cur) {
	for(auto viz : g[cur]) {
		prof[viz]=prof[cur]+1;
		dfs(viz);
	}
	ord.push_back(cur);
	indt[cur]=ord.size()-1;
}

int query(int sind, int ini, int fim, int qini, int qfim) {
	if(qini>fim||qfim<ini) return 0;
	if(qini<=ini&&qfim>=fim) return seg[sind].mni;
	int m=(ini+fim)/2; int e=sind*2; int d=e+1;
	int aa=query(e, ini, m, qini, qfim);
	int bb=query(d, m+1, fim, qini, qfim);
	if(prof[ord[aa]]<=prof[ord[bb]]) return aa;
	else return bb;
}

void update(int sind, int ini, int fim, int qind, int k) {
	if(qind<ini||qind>fim) return;
	if(ini==fim) {
		if(k==1) seg[sind].mn=prof[ord[ini]], seg[sind].cnt=0;
		else seg[sind].mn=MAXN, seg[sind].cnt=1;
		return;
	}
	int m=(ini+fim)/2; int e=sind*2; int d=e+1;
	update(e, ini, m, qind, k); update(d, m+1, fim, qind, k);

	seg[sind].mn=min(seg[e].mn, seg[d].mn);
	if(seg[sind].mn==seg[e].mn) seg[sind].mni=seg[e].mni;
	else seg[sind].mni=seg[d].mni;
	seg[sind].cnt=seg[e].cnt+seg[d].cnt;
}


void build(int sind, int ini, int fim) {
	if(ini==fim) {
		seg[sind].mn=MAXN;
		seg[sind].mni=ini;
		seg[sind].cnt=1;
		return;
	}
	int m=(ini+fim)/2; int e=sind*2; int d=e+1;
	build(e, ini, m); build(d, m+1, fim);
	seg[sind].mn=MAXN; seg[sind].mni=0;
	seg[sind].cnt=seg[e].cnt+seg[d].cnt;
}

int main() {
	scanf("%d %d", &n, &q);
	for(int i=1; i<=n; i++) {
		int a; scanf("%d", &a);
		g[a].push_back(i);
	}

	predfs(1);
	for(int i=1; i<=n; i++) sort(g[i].begin(), g[i].end(), cmp);
	ord.push_back(0); prof[1]=1; dfs(1); prof[0]=MAXN;
	for(int i=1; i<=n; i++) pq.push(-i);

	build(1, 1, n);

	while(q--) {
		int a, val; scanf("%d %d", &a, &val);
		if(a==1) {
			int ind;
			for(int i=1; i<=val; i++) {
				ind=-pq.top();
				update(1, 1, n, ind, 1);
				pq.pop();
				// printf("%d > %d // %d\n", i, ind, ord[query(1, 1, n, 1, n)]);
			}
			printf("%d\n", ord[ind]);
		}
		else {
			int cara=query(1, 1, n, indt[val], n);
			printf("%d\n", prof[val]-prof[ord[cara]]);
			update(1, 1, n, cara, -1);
			pq.push(-cara);
			// printf("qu %d %d > %d\n", indt[val], n, ord[cara]);
		}

	}
}

Compilation message

ballmachine.cpp: In function 'int main()':
ballmachine.cpp:77:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &q);
  ~~~~~^~~~~~~~~~~~~~~~~
ballmachine.cpp:79:15: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int a; scanf("%d", &a);
          ~~~~~^~~~~~~~~~
ballmachine.cpp:91:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int a, val; scanf("%d %d", &a, &val);
               ~~~~~^~~~~~~~~~~~~~~~~~~
ballmachine.cpp:100:26: warning: 'ind' may be used uninitialized in this function [-Wmaybe-uninitialized]
    printf("%d\n", ord[ind]);
                          ^
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 2688 KB Output isn't correct
2 Incorrect 120 ms 7128 KB Output isn't correct
3 Correct 86 ms 7160 KB Output is correct
4 Runtime error 9 ms 5120 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Incorrect 5 ms 2688 KB Output isn't correct
6 Runtime error 9 ms 5248 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 10 ms 5248 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Runtime error 9 ms 5348 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Runtime error 10 ms 5632 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Runtime error 16 ms 6912 KB Execution killed with signal 11 (could be triggered by violating memory limits)
11 Runtime error 43 ms 11768 KB Execution killed with signal 11 (could be triggered by violating memory limits)
12 Correct 90 ms 6988 KB Output is correct
13 Runtime error 48 ms 11640 KB Execution killed with signal 11 (could be triggered by violating memory limits)
# Verdict Execution time Memory Grader output
1 Correct 52 ms 6008 KB Output is correct
2 Incorrect 241 ms 12372 KB Output isn't correct
3 Correct 97 ms 8772 KB Output is correct
4 Runtime error 22 ms 9080 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Runtime error 24 ms 8824 KB Execution killed with signal 11 (could be triggered by violating memory limits)
6 Runtime error 22 ms 8824 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 19 ms 8576 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Correct 58 ms 6008 KB Output is correct
9 Incorrect 218 ms 14308 KB Output isn't correct
10 Incorrect 221 ms 12220 KB Output isn't correct
11 Runtime error 77 ms 17100 KB Execution killed with signal 11 (could be triggered by violating memory limits)
12 Runtime error 54 ms 16876 KB Execution killed with signal 11 (could be triggered by violating memory limits)
13 Correct 113 ms 12624 KB Output is correct
14 Correct 104 ms 8944 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 59 ms 15008 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Runtime error 79 ms 21232 KB Execution killed with signal 11 (could be triggered by violating memory limits)
3 Runtime error 60 ms 21872 KB Execution killed with signal 11 (could be triggered by violating memory limits)
4 Runtime error 43 ms 16724 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Runtime error 44 ms 15960 KB Execution killed with signal 11 (could be triggered by violating memory limits)
6 Runtime error 59 ms 16032 KB Execution killed with signal 11 (could be triggered by violating memory limits)
7 Runtime error 72 ms 19824 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Runtime error 64 ms 21844 KB Execution killed with signal 11 (could be triggered by violating memory limits)
9 Runtime error 69 ms 17904 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Runtime error 66 ms 17156 KB Execution killed with signal 11 (could be triggered by violating memory limits)
11 Runtime error 87 ms 20372 KB Execution killed with signal 11 (could be triggered by violating memory limits)
12 Runtime error 89 ms 21232 KB Execution killed with signal 11 (could be triggered by violating memory limits)
13 Runtime error 84 ms 23536 KB Execution killed with signal 11 (could be triggered by violating memory limits)
14 Runtime error 56 ms 16244 KB Execution killed with signal 11 (could be triggered by violating memory limits)
# Verdict Execution time Memory Grader output
1 Runtime error 57 ms 17876 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Runtime error 96 ms 21868 KB Execution killed with signal 11 (could be triggered by violating memory limits)
3 Correct 147 ms 15856 KB Output is correct
4 Runtime error 59 ms 17892 KB Execution killed with signal 11 (could be triggered by violating memory limits)
5 Incorrect 145 ms 10072 KB Output isn't correct
6 Incorrect 175 ms 13164 KB Output isn't correct
7 Runtime error 95 ms 21916 KB Execution killed with signal 11 (could be triggered by violating memory limits)
8 Correct 162 ms 15784 KB Output is correct
9 Correct 107 ms 8944 KB Output is correct