QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#776490#9733. Heavy-light DecompositioncbdsopaWA 7ms4308kbC++142.0kb2024-11-23 19:04:142024-11-23 19:04:14

Judging History

你现在查看的是最新测评结果

  • [2024-11-23 19:04:14]
  • 评测
  • 测评结果:WA
  • 用时:7ms
  • 内存:4308kb
  • [2024-11-23 19:04:14]
  • 提交

answer

#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
#define db double
#define file(a) freopen(#a".in", "r", stdin), freopen(#a".out", "w", stdout)
#define sky fflush(stdout)
#define gc getchar
#define pc putchar
namespace IO{
	template<class T>
	inline void read(T &s){
		s = 0;char ch = gc();bool f = 0;
		while(ch < '0' || '9'<ch) {if(ch == '-') f = 1; ch = gc();}
		while('0'<=ch && ch<='9') {s = s * 10 + (ch ^ 48); ch = gc();}
		if(ch == '.'){
			T p = 0.1;ch = gc();
			while('0' <= ch && ch <= '9') {s = s + p * (ch ^ 48);p /= 10;ch = gc();}
		}
		s = f ? -s : s;
	}
	template<class T,class ...A>
	inline void read(T &s,A &...a){
		read(s); read(a...);
	}
	template<class T>
	inline void print(T x){
		if(x<0) {x = -x; pc('-');}
		static char st[40];
		static int top;
		top = 0;
		do{st[++top] = x - x / 10 * 10 + '0';} while(x /= 10);
		while(top) {pc(st[top--]);}
	}
	template<class T,class ...A>
	inline void print(T s,A ...a){
		print(s); print(a...);
	}
};
using IO::read;
using IO::print;
const int N = 1e5;
int n, m;
struct node{
	int l, r;
}p[N + 3];
int fa[N + 3];
inline void solve(){
	read(n, m);
	for(int i = 1; i <= n; ++i) fa[i] = 0;
	for(int i = 1; i <= m; ++i){
		read(p[i].l, p[i].r);
		for(int j = p[i].l + 1; j <= p[i].r; ++j){
			fa[j] = j - 1;
		}
	}
	std::sort(p + 1, p + 1 + m, [](const node &x, const node &y){
		return x.r - x.l + 1 > y.r - y.l + 1;
	});
	int mxlen = p[1].r - p[1].l + 1, mxcnt = 0;
	for(int i = 1; i <= m; ++i){
		if(mxlen == p[i].r - p[i].l + 1){
			++mxcnt;
		}
	}
	if(mxcnt > 1){
		if(n - mxcnt){
			for(int i = 2; i < m; ++i){
				fa[p[i].l] = p[1].l;
			}
			fa[p[m].l] = p[1].l + 1;
		}else{
			printf("IMPOSSIBLE\n");
			return;
		}
	}else{
		for(int i = 2; i <= m; ++i){
			fa[p[i].l] = p[1].l;
		}
	}
	for(int i = 1; i <= n; ++i){
		printf("%d%c", fa[i], (i == n)[" \n"]);
	}
}
int main(){
#ifdef LOCAL
	file(a);
#endif
	int T; read(T);
	while(T--){
		solve();
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3752kb

input:

3
12 5
1 5
9 11
7 8
6 6
12 12
4 3
1 1
4 4
2 3
2 2
1 1
2 2

output:

0 1 2 3 4 1 1 7 1 9 10 1
2 0 2 2
IMPOSSIBLE

result:

ok Correct. (3 test cases)

Test #2:

score: -100
Wrong Answer
time: 7ms
memory: 4308kb

input:

10
1 1
1 1
100000 1
1 100000
12 4
1 3
4 6
7 9
10 12
6 3
4 6
2 3
1 1
8999 3
1 3000
3001 6000
6001 8999
14 4
1 3
4 6
7 10
11 14
17 5
1 3
4 6
7 10
11 14
15 17
19999 2
1 9999
10000 19999
1 1
1 1
5 3
1 1
2 3
4 5

output:

0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

wrong answer 3 should be a heavy child, but the maximum one with size 3 and 1 found. (test case 3)