标签:int tput multiple call cts lse fir sync line
题意是一个长度为n的序列,给你m组区间(l,r),在这个区间里不能填入重复的数字,同时使整个序列字典序最小
同学用的优先队列,标程里使用的是贪心同时使用set维护答案序列
贪心是先采用pre数组来确定哪些区间不能重复,再通过记录从set弹出答案的位置来计算的
1 #include <iostream> 2 #include <set> 3 #include <algorithm> 4 5 using namespace std; 6 7 int pre[100010]; 8 int ret[100010]; 9 10 int main() 11 { 12 ios::sync_with_stdio(false); 13 int t; 14 cin >> t; 15 16 while (t--) 17 { 18 set<int> s; 19 int m, n; 20 cin >> n >> m; 21 for (int i = 1; i <= n; i++) 22 { 23 pre[i] = i; 24 s.insert(i); 25 } 26 27 for (int i = 1; i <= m; i++) 28 { 29 int l, r; 30 cin >> l >> r; 31 pre[r] = min(pre[r], l); 32 } 33 34 for (int i = n - 1; i > 0; i--) 35 pre[i] = min(pre[i], pre[i + 1]); 36 37 int pos = 1; 38 for (int i = 1; i <= n; i++) 39 { 40 while (pre[i] > pos) 41 { 42 s.insert(ret[pos]); 43 pos++; 44 } 45 ret[i] = *s.begin(); 46 s.erase(ret[i]); 47 } 48 49 for (int i = 1; i <= n; i++) 50 { 51 cout << ret[i]; 52 if (i != n) 53 cout << " "; 54 } 55 cout << endl; 56 } 57 58 return 0; 59 }
HDU6301-2018ACM暑假多校联合训练1004-Distinct Values
标签:int tput multiple call cts lse fir sync line
原文地址:https://www.cnblogs.com/qq965921539/p/9360632.html