답안 #156010

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
156010 2019-10-02T14:53:54 Z ASDF123 Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++14
30 / 100
3000 ms 26712 KB
#include <bits/stdc++.h>
//#define int long long
#define fr first
#define sc second
#define all(s) s.begin(), s.end()
#define szof(s) (int)s.size()
using namespace std;

const int N = (int)1e6 + 5;
const int INF = 1e9 + 7;
const int MOD = (int)1e9 + 7;

int tests = 1;
int n, l, r, k;
int a[N];


pair<int, int> tree[N * 4];
int pref[N];

void build(int v = 1, int tl = 1, int tr = N) {
  if (tl == tr) {
    tree[v].fr = a[tl];
    tree[v].sc = a[tl];
    return;
  }
  int mid = tl + tr >> 1;
  build(v + v, tl, mid);
  build(v + v + 1, mid + 1, tr);
  tree[v].fr = min(tree[v + v].fr, tree[v + v + 1].fr);
  tree[v].sc = max(tree[v + v].sc, tree[v + v + 1].sc);
}

pair<int, int> get(int l, int r, int v = 1, int tl = 1, int tr = N) {
  if (l <= tl && tr <= r) {
    return tree[v];
  }
  if (l > tr || tl > r) {
    return {INF, -INF};
  }
  int mid = tl + tr >> 1;
  pair<int, int> p1 = get(l, r, v + v, tl, mid);
  pair<int, int> p2 = get(l, r, v + v + 1, mid + 1, tr);
  return {min(p1.fr, p2.fr), max(p1.sc, p2.sc)};
}

int bad(int l, int r) {
  return pref[r - 1] - pref[l - 1];
}


void solve() {
  scanf("%d%d%d", &l, &r, &k);

  if (k < get(l, r).fr) {
    if (bad(l, r)) {
      puts("0");
    } else {
      puts("1");
    }
    return;
  }

  set <int> st;
  set <int> ::iterator it;
  bool ok = true;
  int mn = INF;

//  for (int i = r; i >= l; i--) {
//    if (i == r) {
//      st.insert(a[i]);
//      mn = min(mn, a[i]);
//      continue;
//    }
//    if (mn < a[i]) {
//      it = st.lower_bound(a[i]);
//      it--;
//      if (*it + a[i] > k) {
//        ok = false;
//        break;
//      }
//    }
//    st.insert(a[i]);
//    mn = min(mn, a[i]);
//  }

  for (int i = r; i >= l; i--) {
    int mx = get(l, max(l, i - 1)).sc;
    if (mx > a[i] && mx + a[i] > k) {
      ok = false;
      break;
    }
    int j = i;
    while (j >= 1 && a[j] == a[i]) {
      j--;
    }
    i = j + 1;
  }

  if (ok) {
    puts("1");
  } else {
    puts("0");
  }
}

main() {
  scanf("%d%d", &n, &tests);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  build();

  for (int i = 1; i <= n; i++) {
    pref[i] = pref[i - 1] + (a[i] > a[i + 1]);
  }

//  for (int i = 1; i <= n; i++) {
//    cout << pref[i] << " ";
//  }cout << endl;
//
//  while (1) {
//    int l, r;
//    cin >> l >> r;
//    cout << get(l, r) << endl;
//  }


  while (tests--) {
    solve();
  }
}

Compilation message

sortbooks.cpp: In function 'void build(int, int, int)':
sortbooks.cpp:27:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   int mid = tl + tr >> 1;
             ~~~^~~~
sortbooks.cpp: In function 'std::pair<int, int> get(int, int, int, int, int)':
sortbooks.cpp:41:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   int mid = tl + tr >> 1;
             ~~~^~~~
sortbooks.cpp: In function 'void solve()':
sortbooks.cpp:67:7: warning: unused variable 'mn' [-Wunused-variable]
   int mn = INF;
       ^~
sortbooks.cpp: At global scope:
sortbooks.cpp:107:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main() {
      ^
sortbooks.cpp: In function 'void solve()':
sortbooks.cpp:53:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d%d", &l, &r, &k);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp: In function 'int main()':
sortbooks.cpp:108:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &n, &tests);
   ~~~~~^~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:110:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &a[i]);
     ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 16760 KB Output is correct
2 Correct 26 ms 16760 KB Output is correct
3 Correct 26 ms 16748 KB Output is correct
4 Correct 27 ms 16760 KB Output is correct
5 Correct 26 ms 16760 KB Output is correct
6 Correct 27 ms 16760 KB Output is correct
7 Correct 28 ms 16732 KB Output is correct
8 Correct 49 ms 16760 KB Output is correct
9 Correct 34 ms 16760 KB Output is correct
10 Correct 38 ms 16760 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 16760 KB Output is correct
2 Correct 26 ms 16760 KB Output is correct
3 Correct 26 ms 16748 KB Output is correct
4 Correct 27 ms 16760 KB Output is correct
5 Correct 26 ms 16760 KB Output is correct
6 Correct 27 ms 16760 KB Output is correct
7 Correct 28 ms 16732 KB Output is correct
8 Correct 49 ms 16760 KB Output is correct
9 Correct 34 ms 16760 KB Output is correct
10 Correct 38 ms 16760 KB Output is correct
11 Correct 31 ms 16888 KB Output is correct
12 Correct 32 ms 16860 KB Output is correct
13 Correct 34 ms 16888 KB Output is correct
14 Correct 41 ms 17016 KB Output is correct
15 Correct 36 ms 16888 KB Output is correct
16 Correct 2258 ms 16960 KB Output is correct
17 Correct 1227 ms 17060 KB Output is correct
18 Correct 33 ms 16888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1548 ms 26644 KB Output is correct
2 Correct 1520 ms 26620 KB Output is correct
3 Correct 1535 ms 26712 KB Output is correct
4 Correct 1509 ms 26628 KB Output is correct
5 Correct 1508 ms 26700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3048 ms 17632 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 16760 KB Output is correct
2 Correct 26 ms 16760 KB Output is correct
3 Correct 26 ms 16748 KB Output is correct
4 Correct 27 ms 16760 KB Output is correct
5 Correct 26 ms 16760 KB Output is correct
6 Correct 27 ms 16760 KB Output is correct
7 Correct 28 ms 16732 KB Output is correct
8 Correct 49 ms 16760 KB Output is correct
9 Correct 34 ms 16760 KB Output is correct
10 Correct 38 ms 16760 KB Output is correct
11 Correct 31 ms 16888 KB Output is correct
12 Correct 32 ms 16860 KB Output is correct
13 Correct 34 ms 16888 KB Output is correct
14 Correct 41 ms 17016 KB Output is correct
15 Correct 36 ms 16888 KB Output is correct
16 Correct 2258 ms 16960 KB Output is correct
17 Correct 1227 ms 17060 KB Output is correct
18 Correct 33 ms 16888 KB Output is correct
19 Execution timed out 3025 ms 18824 KB Time limit exceeded
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 16760 KB Output is correct
2 Correct 26 ms 16760 KB Output is correct
3 Correct 26 ms 16748 KB Output is correct
4 Correct 27 ms 16760 KB Output is correct
5 Correct 26 ms 16760 KB Output is correct
6 Correct 27 ms 16760 KB Output is correct
7 Correct 28 ms 16732 KB Output is correct
8 Correct 49 ms 16760 KB Output is correct
9 Correct 34 ms 16760 KB Output is correct
10 Correct 38 ms 16760 KB Output is correct
11 Correct 31 ms 16888 KB Output is correct
12 Correct 32 ms 16860 KB Output is correct
13 Correct 34 ms 16888 KB Output is correct
14 Correct 41 ms 17016 KB Output is correct
15 Correct 36 ms 16888 KB Output is correct
16 Correct 2258 ms 16960 KB Output is correct
17 Correct 1227 ms 17060 KB Output is correct
18 Correct 33 ms 16888 KB Output is correct
19 Correct 1548 ms 26644 KB Output is correct
20 Correct 1520 ms 26620 KB Output is correct
21 Correct 1535 ms 26712 KB Output is correct
22 Correct 1509 ms 26628 KB Output is correct
23 Correct 1508 ms 26700 KB Output is correct
24 Execution timed out 3048 ms 17632 KB Time limit exceeded
25 Halted 0 ms 0 KB -