답안 #951375

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
951375 2024-03-21T18:08:43 Z nguyennh Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++14
17 / 100
912 ms 64228 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[4 * 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 <= 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;
      |                   ~~^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 19032 KB Output is correct
2 Correct 5 ms 19036 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 5 ms 19288 KB Output is correct
5 Correct 5 ms 19252 KB Output is correct
6 Correct 29 ms 19036 KB Output is correct
7 Correct 26 ms 19036 KB Output is correct
8 Correct 35 ms 19032 KB Output is correct
9 Correct 14 ms 19036 KB Output is correct
10 Correct 28 ms 19256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 19032 KB Output is correct
2 Correct 5 ms 19036 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 5 ms 19288 KB Output is correct
5 Correct 5 ms 19252 KB Output is correct
6 Correct 29 ms 19036 KB Output is correct
7 Correct 26 ms 19036 KB Output is correct
8 Correct 35 ms 19032 KB Output is correct
9 Correct 14 ms 19036 KB Output is correct
10 Correct 28 ms 19256 KB Output is correct
11 Correct 12 ms 19292 KB Output is correct
12 Correct 24 ms 19296 KB Output is correct
13 Correct 27 ms 19288 KB Output is correct
14 Correct 43 ms 19280 KB Output is correct
15 Correct 41 ms 19288 KB Output is correct
16 Correct 68 ms 19292 KB Output is correct
17 Correct 55 ms 19292 KB Output is correct
18 Correct 70 ms 19288 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 36 ms 40572 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 347 ms 38000 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 19032 KB Output is correct
2 Correct 5 ms 19036 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 5 ms 19288 KB Output is correct
5 Correct 5 ms 19252 KB Output is correct
6 Correct 29 ms 19036 KB Output is correct
7 Correct 26 ms 19036 KB Output is correct
8 Correct 35 ms 19032 KB Output is correct
9 Correct 14 ms 19036 KB Output is correct
10 Correct 28 ms 19256 KB Output is correct
11 Correct 12 ms 19292 KB Output is correct
12 Correct 24 ms 19296 KB Output is correct
13 Correct 27 ms 19288 KB Output is correct
14 Correct 43 ms 19280 KB Output is correct
15 Correct 41 ms 19288 KB Output is correct
16 Correct 68 ms 19292 KB Output is correct
17 Correct 55 ms 19292 KB Output is correct
18 Correct 70 ms 19288 KB Output is correct
19 Correct 912 ms 60356 KB Output is correct
20 Correct 910 ms 63544 KB Output is correct
21 Correct 798 ms 63216 KB Output is correct
22 Correct 797 ms 63668 KB Output is correct
23 Correct 786 ms 64228 KB Output is correct
24 Incorrect 740 ms 63128 KB Output isn't correct
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 19032 KB Output is correct
2 Correct 5 ms 19036 KB Output is correct
3 Correct 8 ms 19036 KB Output is correct
4 Correct 5 ms 19288 KB Output is correct
5 Correct 5 ms 19252 KB Output is correct
6 Correct 29 ms 19036 KB Output is correct
7 Correct 26 ms 19036 KB Output is correct
8 Correct 35 ms 19032 KB Output is correct
9 Correct 14 ms 19036 KB Output is correct
10 Correct 28 ms 19256 KB Output is correct
11 Correct 12 ms 19292 KB Output is correct
12 Correct 24 ms 19296 KB Output is correct
13 Correct 27 ms 19288 KB Output is correct
14 Correct 43 ms 19280 KB Output is correct
15 Correct 41 ms 19288 KB Output is correct
16 Correct 68 ms 19292 KB Output is correct
17 Correct 55 ms 19292 KB Output is correct
18 Correct 70 ms 19288 KB Output is correct
19 Runtime error 36 ms 40572 KB Execution killed with signal 11
20 Halted 0 ms 0 KB -