답안 #511504

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
511504 2022-01-16T00:49:18 Z Gev2706 Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++17
30 / 100
1066 ms 132112 KB
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <unordered_set>
#include <queue>
#include <deque>
#include <string>
#include <sstream>
#include <iomanip>
#include <map>
#include <unordered_map>
#include <stack>
#include <cstdio>
#include <climits>
#include <tuple>
#include <ctime>
#include <cstring>
#include <numeric>
#include <functional>
#include <chrono>
#include <cassert>
#include <bitset>
//#include <bit>
//#include <ranges>
//#include <numbers>
#define itn int
#define sacnf scanf
#define sz(a) ((int)((a).size()))
// printf("%.10f\n", ans);
using ll = long long;
using namespace std;
const ll mod = 1e9 + 7;
const int N = 1e6 + 5;

int fm(int& L, int& R, vector<int>& l, vector<vector<int>>& st)
{
    int j = l[R - L + 1];
    return min(st[L][j], st[R - (1 << j) + 1][j]);
}

int main()
{
    /*ios_base::sync_with_stdio(false);
    cin.tie(NULL);*/
    int n, m;
    scanf("%d%d", &n, &m);
    vector<int> v(n);
    for (int i = 0; i < n; i++) scanf("%d", &v[i]);
    if (n <= 5000 && m <= 5000)
    {
        for (int i = 0; i < m; i++)
        {
            int l, r, k;
            scanf("%d%d%d", &l, &r, &k);
            l--, r--;
            int mx_num = 0, mx = 0;
            for (int j = l; j <= r; j++)
            {
                if (mx_num > v[j]) mx = max(mx, v[j] + mx_num);
                mx_num = max(mx_num, v[j]);
            }
            if (mx <= k) printf("1\n");
            else printf("0\n");
        }
    }
    else
    {
        stack<int> s;
        vector<int> ans(n);
        for (int i = 0; i < n; i++)
        {
            int next = v[i];
            if (s.empty()) 
            {
                s.push(i);
                continue;
            }
            while (!s.empty() && v[s.top()] > next) 
            {
                ans[s.top()] = i;
                s.pop();
            }
            s.push(i);
        }
        while (!s.empty()) 
        {
            ans[s.top()] = 2e9;
            s.pop();
        }
        vector<vector<int>> st(n + 2, vector<int>(22));
        for (int i = 0; i < n; i++) st[i][0] = ans[i];
        for (int j = 1; j <= 21; j++)
            for (int i = 0; i + (1 << j) < n + 2; i++)
                st[i][j] = min(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
        vector<int> g(n + 2);
        g[1] = 0;
        for (int i = 2; i < n + 2; i++)
            g[i] = g[i / 2] + 1;
        while (m--)
        {
            int l, r, k;
            scanf("%d%d%d", &l, &r, &k);
            l--, r--;
            if (fm(l, r, g, st) <= r) printf("0\n");
            else printf("1\n");
        }
    }
    return 0;
}


// https://codeforces.com/problemset/problem/1136/D?locale=ru

Compilation message

sortbooks.cpp: In function 'int main()':
sortbooks.cpp:49:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |     scanf("%d%d", &n, &m);
      |     ~~~~~^~~~~~~~~~~~~~~~
sortbooks.cpp:51:38: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |     for (int i = 0; i < n; i++) scanf("%d", &v[i]);
      |                                 ~~~~~^~~~~~~~~~~~~
sortbooks.cpp:57:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   57 |             scanf("%d%d%d", &l, &r, &k);
      |             ~~~~~^~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:105:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  105 |             scanf("%d%d%d", &l, &r, &k);
      |             ~~~~~^~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 300 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 300 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 3 ms 332 KB Output is correct
12 Correct 6 ms 416 KB Output is correct
13 Correct 7 ms 420 KB Output is correct
14 Correct 12 ms 428 KB Output is correct
15 Correct 11 ms 460 KB Output is correct
16 Correct 20 ms 408 KB Output is correct
17 Correct 19 ms 388 KB Output is correct
18 Correct 21 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1002 ms 131992 KB Output is correct
2 Correct 1039 ms 132112 KB Output is correct
3 Correct 1047 ms 131732 KB Output is correct
4 Correct 1066 ms 131492 KB Output is correct
5 Correct 1022 ms 131456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 81 ms 13380 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 300 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 3 ms 332 KB Output is correct
12 Correct 6 ms 416 KB Output is correct
13 Correct 7 ms 420 KB Output is correct
14 Correct 12 ms 428 KB Output is correct
15 Correct 11 ms 460 KB Output is correct
16 Correct 20 ms 408 KB Output is correct
17 Correct 19 ms 388 KB Output is correct
18 Correct 21 ms 332 KB Output is correct
19 Incorrect 182 ms 26700 KB Output isn't correct
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 300 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 3 ms 332 KB Output is correct
12 Correct 6 ms 416 KB Output is correct
13 Correct 7 ms 420 KB Output is correct
14 Correct 12 ms 428 KB Output is correct
15 Correct 11 ms 460 KB Output is correct
16 Correct 20 ms 408 KB Output is correct
17 Correct 19 ms 388 KB Output is correct
18 Correct 21 ms 332 KB Output is correct
19 Correct 1002 ms 131992 KB Output is correct
20 Correct 1039 ms 132112 KB Output is correct
21 Correct 1047 ms 131732 KB Output is correct
22 Correct 1066 ms 131492 KB Output is correct
23 Correct 1022 ms 131456 KB Output is correct
24 Incorrect 81 ms 13380 KB Output isn't correct
25 Halted 0 ms 0 KB -