fork download
  1. // ROOT : DRAGON3012009
  2. #include <bits/stdc++.h>
  3. #define ll unsigned long long
  4. #define ld long double
  5. #define el "\n"
  6. #define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  7. #define __ROOT__ int main()
  8. #pragma GCC optimize("O2")
  9. //#pragma GCC optimize("unroll-loops")
  10. //#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
  11. #define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
  12. #define FORD(i,r,l) for(int i = r ; i >= l ; i --)
  13. #define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
  14. #define fi first
  15. #define se second
  16. #define M 1000000007
  17. #define MAXN 200001
  18. #define INF (1ll<<30)
  19. #define BLOCK_SIZE 425
  20. #define MAX_NODE 1001001
  21. #define LOG 18
  22. #define ALPHA_SIZE 26
  23. #define BASE 256
  24. #define NAME "file"
  25. #define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
  26. using namespace std;
  27. using namespace chrono ;
  28. const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
  29. const ll NMOD = 1;
  30. const int dx[] = {-1, 0, 1,0};
  31. const int dy[] = {0, 1, 0, -1};
  32. //**Variable**//
  33. ll n, q ;
  34. ll arr[MAXN];
  35. //**Struct**//
  36. ll add(ll a, ll b ) {
  37. return (a + b ) % M ;
  38. }
  39. ll mul(ll a, ll b ) {
  40. return a * b % M ;
  41. }
  42. struct Seg {
  43. ll val[MAXN << 2 ], lazy[MAXN << 2 ] ;
  44. void fix(ll id, ll l, ll r ) {
  45. if(lazy[id]) {
  46. val[id] = add(val[id], mul(r - l + 1, lazy[id])) ;
  47. if(l!= r ) {
  48. lazy[id<<1] = add(lazy[id << 1], lazy[id]) ;
  49. lazy[id<<1|1] = add(lazy[id << 1 |1 ], lazy[id]) ;
  50. }
  51. lazy[id] = 0 ;
  52. }
  53. }
  54. void update(ll id, ll l, ll r, ll u, ll v, ll value ) {
  55. fix(id, l, r) ;
  56. if(u > r || v < l ) return ;
  57. if(u<= l && v >= r ) {
  58. lazy[id] = add(lazy[id], value) ;
  59. fix(id, l, r) ;
  60. return ;
  61. }
  62. ll m = l + r >> 1;
  63. update(id << 1, l, m, u, v, value) ;
  64. update(id << 1 | 1, m + 1, r, u, v, value ) ;
  65. val[id] =add(val[id << 1], val[id << 1 | 1 ]) ;
  66. }
  67. ll get(ll id, ll l, ll r, ll u, ll v ) {
  68. fix(id, l, r) ;
  69. if(u > r || v < l ) return 0 ;
  70. if(u<= l && v >= r ) return val[id] ;
  71. ll m = l + r >> 1;
  72. return add(get(id << 1, l, m, u, v), get(id << 1 | 1, m + 1, r, u, v) ) ;
  73. }
  74. } seg[3];
  75. //**Function**//
  76. template<class X, class Y >
  77. bool minimize(X & x, const Y &y ) {
  78. return x > y ? x = y, 1:0 ;
  79. }
  80. template<class X, class Y >
  81. bool maximize(X &x, const Y &y ) {
  82. return x < y ? x = y, 1:0 ;
  83. }
  84. struct Que {
  85. ll l, r, type ;
  86. } que[MAXN] ;
  87. void init() {
  88. cin>>n >> q ;
  89. FOR(i, 1, q ) {
  90. cin >> que[i].type >> que[i].l >> que[i].r ;
  91. }
  92. }
  93.  
  94. void solve() {
  95. FORD(i, q, 1 ) {
  96. ll t = seg[2].get(1, 1, q, i, i ) + 1 ;
  97. if(que[i].type == 2 ) {
  98. seg[2].update(1, 1, q, que[i].l , que[i].r, t % M ) ;
  99. }
  100. }
  101. FOR(i, 1, q ) {
  102. ll freg = seg[2].get(1, 1, q, i, i ) ;
  103. if(que[i].type == 1 ) {
  104. seg[1].update(1, 1, n, que[i].l, que[i].r, add(freg , 1 ) ) ;
  105. }
  106. }
  107. FOR(i, 1, n ) cout << seg[1].get(1,1, n, i, i) << " " ;
  108. }
  109.  
  110. __ROOT__ {
  111. // freopen(NAME".inp" , "r" , stdin);
  112. // freopen(NAME".out" , "w", stdout) ;
  113. fast;
  114. int t = 1; // cin >> t ;
  115. while(t--) {
  116. init();
  117. solve();
  118. }
  119. return (0&0);
  120. }
  121.  
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty