Submission #951376

# Submission time Handle Problem Language Result Execution time Memory
951376 2024-03-21T18:13:15 Z nguyennh Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++14
17 / 100
1295 ms 62800 KB
#include<bits/stdc++.h>
#define el '\n'
using namespace std ;

mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());

const int MN = 2e5 + 5;

const int inf = numeric_limits<int>::max();

int n , m , a[MN];

namespace sub_trau{
  bool valid_input(){
    return n <= 500 && m <= 500;
  }
  
  void solve(){
    while(m--){
      int l , r , k;
      cin >> l >> r >> k;
      int ans = 0;
      for ( int i = l ; i <= r ; i++ ){
        for ( int j = i ; j <= r ; j++ ){
          if (a[j] < a[i]) ans = max(ans , a[j] + a[i]);
        }
      }
      cout << (ans <= k ? 1 : 0) << el;
    }
  }
}

namespace sub2{
  bool valid_input(){
    return n <= 5000 && m <= 5000;
  }
  
  void solve(){
    while(m--){
      int l , r , k;
      cin >> l >> r >> k;
      int ans = 0;
      vector<int> pref(r + 3);
      pref[l - 1] = INT_MIN;
      pref[l] = a[l];
      for ( int i = l + 1 ; i <= r ; i++ ) pref[i] = max(pref[i - 1] , a[i]);
      for ( int i = l ; i <= r ; i++ ){
        if (pref[i - 1] > a[i]) ans = max(ans , a[i] + pref[i - 1]);
      }
      cout << (ans <= k ? 1 : 0) << el;
    }
  }
}

namespace sub_final{
  struct merge_sort_tree{
    #define lt(x) (x << 1)
    #define rt(x) (x << 1 | 1)
    vector<int> st[5 * MN];
    
    void build(int id , int l , int r){
      if (l == r){
        st[id].push_back(a[l]);
        return;
      }
      int mid = l + r >> 1;
      build(id << 1 , l , mid);
      build(id << 1 | 1 , mid + 1 , r);
      merge(st[lt(id)].begin() , st[lt(id)].end() , st[rt(id)].begin() , st[rt(id)].end() , back_inserter(st[id]));
    }
    
    int get(int id , int l , int r , int tl , int tr , int x){
      if (l > tr || r < tl) return -inf;
      else if (l >= tl && r <= tr){
        auto it = upper_bound(st[id].begin() , st[id].end() , x) - st[id].begin() - 1;
        if (it >= 0) return st[id][it];
        else return -inf;
      }
      int mid = l + r >> 1;
      return max(get(id << 1 , l , mid , tl , tr , x) , get(id << 1 | 1 , mid + 1 , r , tl , tr , x));
    }
  } mt;
  
  struct Segtri{
    struct Node{
      int l , r , best , max_val;
      Node () {};
      Node (int _l , int _r , int _b , int _m) : l(_l) , r(_r) , best(_b) , max_val(_m) {};
    };
    
    Node merge(const Node &x , const Node &y){
      Node c;
      c.l = x.l;
      c.r = y.r;
      c.max_val = max(x.max_val , y.max_val);
      c.best = max(x.best , y.best);
      int cur = mt.get(1 , 1 , n , y.l , y.r , x.max_val);
      c.best = max(c.best , x.max_val + cur);
      return c;
    }
    
    vector<Node> st;
    
    Segtri(int n) : st(4 * n + 5) {};
    
    void build(int id , int l , int r){
      if (l == r){
        st[id] = {l , l , 0 , a[l]};
        return;
      }
      int mid = l + r >> 1;
      build(id << 1 , l , mid);
      build(id << 1 | 1 , mid + 1 , r);
      st[id] = merge(st[id << 1] , st[id << 1 | 1]);
    }
    
    Node get(int id , int l , int r , int tl , int tr){
      if (l >= tl && r <= tr) return st[id];
      else {
        int mid = l + r >> 1;
        if (tl > mid) return get(id << 1 | 1 , mid + 1 , r , tl , tr);
        else if (tr <= mid) return get(id << 1 , l , mid , tl , tr);
        else return merge(get(id << 1 , l , mid , tl , tr) , get(id << 1 | 1 , mid + 1 , r , tl , tr));
      }
    }
  };
  
  void solve(){
    mt.build(1 , 1 , n);
    Segtri it(n);
    it.build(1 , 1 , n);
    while(m--){
      int l , r , k;
      cin >> l >> r >> k;
      cout << it.get(1 , 1 , n , l , r).best << el;
      cout << (it.get(1 , 1 , n , l , r).best <= k ? 1 : 0) << el;
    }
  }
}

int32_t main (){
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for ( int i = 1 ; i <= n ; i++ ) cin >> a[i];
  if (sub_trau::valid_input()){
    sub_trau::solve();
    return 0;
  }
  if (sub2::valid_input()){
    sub2::solve();
    return 0;
  }
  sub_final::solve();
}

Compilation message

sortbooks.cpp: In member function 'void sub_final::merge_sort_tree::build(int, int, int)':
sortbooks.cpp:66:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   66 |       int mid = l + r >> 1;
      |                 ~~^~~
sortbooks.cpp: In member function 'int sub_final::merge_sort_tree::get(int, int, int, int, int, int)':
sortbooks.cpp:79:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   79 |       int mid = l + r >> 1;
      |                 ~~^~~
sortbooks.cpp: In member function 'void sub_final::Segtri::build(int, int, int)':
sortbooks.cpp:111:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  111 |       int mid = l + r >> 1;
      |                 ~~^~~
sortbooks.cpp: In member function 'sub_final::Segtri::Node sub_final::Segtri::get(int, int, int, int, int)':
sortbooks.cpp:120:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  120 |         int mid = l + r >> 1;
      |                   ~~^~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 23896 KB Output is correct
2 Correct 7 ms 24412 KB Output is correct
3 Correct 7 ms 23900 KB Output is correct
4 Correct 6 ms 23928 KB Output is correct
5 Correct 7 ms 23900 KB Output is correct
6 Correct 25 ms 23900 KB Output is correct
7 Correct 25 ms 23900 KB Output is correct
8 Correct 25 ms 23948 KB Output is correct
9 Correct 11 ms 23900 KB Output is correct
10 Correct 20 ms 23904 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 23896 KB Output is correct
2 Correct 7 ms 24412 KB Output is correct
3 Correct 7 ms 23900 KB Output is correct
4 Correct 6 ms 23928 KB Output is correct
5 Correct 7 ms 23900 KB Output is correct
6 Correct 25 ms 23900 KB Output is correct
7 Correct 25 ms 23900 KB Output is correct
8 Correct 25 ms 23948 KB Output is correct
9 Correct 11 ms 23900 KB Output is correct
10 Correct 20 ms 23904 KB Output is correct
11 Correct 12 ms 23900 KB Output is correct
12 Correct 24 ms 23996 KB Output is correct
13 Correct 29 ms 23992 KB Output is correct
14 Correct 42 ms 23900 KB Output is correct
15 Correct 41 ms 23980 KB Output is correct
16 Correct 70 ms 23924 KB Output is correct
17 Correct 63 ms 23900 KB Output is correct
18 Correct 71 ms 23996 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 40 ms 49756 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 525 ms 42624 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 23896 KB Output is correct
2 Correct 7 ms 24412 KB Output is correct
3 Correct 7 ms 23900 KB Output is correct
4 Correct 6 ms 23928 KB Output is correct
5 Correct 7 ms 23900 KB Output is correct
6 Correct 25 ms 23900 KB Output is correct
7 Correct 25 ms 23900 KB Output is correct
8 Correct 25 ms 23948 KB Output is correct
9 Correct 11 ms 23900 KB Output is correct
10 Correct 20 ms 23904 KB Output is correct
11 Correct 12 ms 23900 KB Output is correct
12 Correct 24 ms 23996 KB Output is correct
13 Correct 29 ms 23992 KB Output is correct
14 Correct 42 ms 23900 KB Output is correct
15 Correct 41 ms 23980 KB Output is correct
16 Correct 70 ms 23924 KB Output is correct
17 Correct 63 ms 23900 KB Output is correct
18 Correct 71 ms 23996 KB Output is correct
19 Incorrect 1295 ms 62800 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 23896 KB Output is correct
2 Correct 7 ms 24412 KB Output is correct
3 Correct 7 ms 23900 KB Output is correct
4 Correct 6 ms 23928 KB Output is correct
5 Correct 7 ms 23900 KB Output is correct
6 Correct 25 ms 23900 KB Output is correct
7 Correct 25 ms 23900 KB Output is correct
8 Correct 25 ms 23948 KB Output is correct
9 Correct 11 ms 23900 KB Output is correct
10 Correct 20 ms 23904 KB Output is correct
11 Correct 12 ms 23900 KB Output is correct
12 Correct 24 ms 23996 KB Output is correct
13 Correct 29 ms 23992 KB Output is correct
14 Correct 42 ms 23900 KB Output is correct
15 Correct 41 ms 23980 KB Output is correct
16 Correct 70 ms 23924 KB Output is correct
17 Correct 63 ms 23900 KB Output is correct
18 Correct 71 ms 23996 KB Output is correct
19 Runtime error 40 ms 49756 KB Execution killed with signal 11
20 Halted 0 ms 0 KB -