fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7.  
  8. const int INF = 1e9;
  9. const ll LINF = 1e18;
  10.  
  11. const int N = 2e5 + 5;
  12. const int Q = 2e5 + 5;
  13.  
  14. // Nhận xét: màu của a[i] sẽ là màu của truy vấn cuối cùng mà tác động lên nó
  15. // Ví dụ: Xét a[3] và ta có các truy vấn: ..., 1 4 3, 3 4 2, 3 6 5, 1 2 3 thì màu của a[3] = 5
  16. // => Duyệt ngược truy vấn, xét qua các ô chưa được tô màu
  17.  
  18. struct Query {
  19. int l, r, c;
  20. };
  21.  
  22. int n, q;
  23. int a[N];
  24. vector<Query> queries;
  25.  
  26. int nxt[N];
  27.  
  28. void init() {
  29. for (int u = 1; u <= n + 1; u++) nxt[u] = u;
  30. }
  31.  
  32. // Tìm ô v gần bên phải u nhất (tính cả u) sao cho v chưa được tô màu
  33. int findNext(int u) {
  34. if (nxt[u] == u) return u;
  35. return nxt[u] = findNext(nxt[u]);
  36. }
  37.  
  38. int ans[Q];
  39.  
  40. int main() {
  41. ios::sync_with_stdio(false);
  42. cin.tie(nullptr);
  43. cin >> n >> q;
  44.  
  45. for (int i = 0; i < q; i++) {
  46. int l, r, c;
  47. cin >> l >> r >> c;
  48. queries.push_back({l, r, c});
  49. }
  50.  
  51. reverse(queries.begin(), queries.end());
  52.  
  53. init();
  54.  
  55. for (int i = 1; i <= n; i++) a[i] = 0;
  56.  
  57. for (Query q : queries) {
  58. for (int i = findNext(q.l); i <= q.r; i = findNext(i + 1)) {
  59. a[i] = q.c;
  60. nxt[i] = findNext(i + 1);
  61. }
  62. }
  63.  
  64. for (int i = 1; i <= n; i++) cout << a[i] << '\n';
  65. }
Success #stdin #stdout 0.01s 5292KB
stdin
4 3
1 3 2
2 4 6
2 3 7
stdout
2
7
7
6