fork download
  1. #include <bits/stdc++.h>
  2. #define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
  3. #define FORD(i,r,l) for(int i = r ; i >= l ; i --)
  4. #define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
  5. #define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
  6. #define ll long long
  7. #define el "\n"
  8. #define fi first
  9. #define se second
  10. #define _ROOT_ int main()
  11. #define M 1000000007
  12. #define MAXN 1000001
  13. #define INF (1ll<<30)
  14. #define NAME "file"
  15. #define debug(a) cout << #a << " = " << a << endl;
  16. using namespace std;
  17.  
  18. ll n, m, q, scc, on ;
  19. ll a[MAXN] ;
  20. ll res[MAXN ] ;
  21. ll lab[MAXN ] ;
  22. pair<ll,ll> que[MAXN ] ;
  23. pair<ll,ll> pos[MAXN ] ;
  24. bool active[MAXN ] ;
  25.  
  26.  
  27. ll find_set(ll a ) {
  28. return lab[a] < 0 ? a : lab[a] = find_set(lab[a]) ;
  29. }
  30. bool union_set(ll a, ll b ) {
  31. if(!active[a]) return false ;
  32. if(!active[b]) return false ;
  33. a = find_set(a) ;
  34. b = find_set(b) ;
  35. if(a == b ) return false ;
  36. if(lab[a] > lab[b]) swap(a, b ) ;
  37. lab[a] += lab[b] ;
  38. lab[b] = a ;
  39. scc -- ;
  40. return true ;
  41. }
  42.  
  43. void init() {
  44. cin >> n >> q ;
  45. FOR(i, 1, n ) cin >> pos[i].fi, pos[i].se = i ;
  46. FOR(i , 1 , q ) cin >> que[i].fi , que[i].se = i ;
  47. }
  48.  
  49. void solve() {
  50. memset(lab, - 1, sizeof lab ) ;
  51.  
  52. sort(pos + 1, pos + n + 1 , greater<>() ) ;
  53. sort(que + 1, que + q + 1 , greater<>() ) ;
  54. ll l = 1 ;
  55. FOR(i, 1, q ) {
  56. ll w = que[i].fi, id = que[i].se ;
  57. while(l <= n && pos[l].fi > w ) {
  58. on ++ ;
  59. ll p = pos[l].se ;
  60. active[p] = true ;
  61. union_set(p + 1 , p ) ;
  62. union_set(p - 1 , p ) ;
  63. l ++ ;
  64. }
  65. // debug(on) ;
  66. // debug(scc) ;
  67. res[id] = on + scc ;
  68. }
  69.  
  70. FOR(i, 1, q ) cout << res[i] << el ;
  71. }
  72.  
  73. _ROOT_ {
  74. // freopen(NAME".inp" , "r" , stdin);
  75. // freopen(NAME".out" , "w", stdout) ;
  76. ios_base::sync_with_stdio(0);
  77. cin.tie(0);
  78. cout.tie(0);
  79. int t = 1; // cin >> t ;
  80. while(t--) {
  81. init();
  82. solve();
  83. }
  84. return (0&0);
  85. }
  86.  
Success #stdin #stdout 0.01s 11768KB
stdin
Standard input is empty
stdout
Standard output is empty