QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#790757 | #9733. Heavy-light Decomposition | ucup-team4906# | WA | 0ms | 20260kb | C++17 | 1.5kb | 2024-11-28 15:13:47 | 2024-11-28 15:13:47 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define pb push_back
using ll = long long;
using vi = vector<int>;
using vii = vector<vi>;
#define N 500010
int n, k;
int l[N], r[N];
int p[N];
vector<int>Num[N];
void solve()
{
cin >> n >> k;
int mx = 0, num = 0, mxid = 0;
for (int i = 1; i <= k; i ++)
{
cin >> l[i] >> r[i];
for (int j = l[i] + 1; j <= r[i]; j ++)p[j] = j - 1;
p[l[i]] = 0;
if (r[i] - l[i] + 1 > mx)mx = r[i] - l[i] + 1, num = 1, mxid = i;
else if(r[i] - l[i] + 1 == mx)num ++;
}
if (num > 1 && num * mx == n) {cout << "IMPOSSIBLE\n"; return ;}
for (int i = 1; i <= k; i ++) if (i != mxid)Num[r[i] - l[i] + 1].push_back(i);
bool flag = 0;
for (int j = r[mxid] - 1, L = 1; j >= l[mxid]; j --, L ++)
{
for (auto id : Num[L]) {p[l[id]] = j; if (j > l[mxid])flag = 1;}
}
if (flag == 0)
{
cout << "IMPOSSIBLE\n";
for (int i = 1; i <= n; i ++)Num[i].clear();
return ;
}
for (int x : Num[mx])p[l[x]] = l[mxid];
for (int i = 1; i <= n; i ++) cout << p[i] << ' '; cout << '\n';
for (int i = 1; i <= n; i ++) Num[i].clear();
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
cin >> T;
for (int i = 1; i <= T; i++)
solve();
return 0;
}
/*
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
*/
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 20260kb
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 4 3 7 2 9 10 4 IMPOSSIBLE IMPOSSIBLE
result:
wrong answer Case 2, jury find a solution while participant not. (test case 2)