답안 #259349

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
259349 2020-08-07T16:20:50 Z karma 돌 무게 재기 (IZhO11_stones) C++14
100 / 100
73 ms 6524 KB
#include <bits/stdc++.h>
#define pb          emplace_back
#define ll          long long
#define fi          first
#define se          second
#define mp          make_pair
//#define int         int64_t

using namespace std;

const int N = 1e5 + 7;
const int inf = 1e9 + 1;
typedef pair<int, int> pii;

int l[N << 2], h[N << 2], lz[N << 2], mx[N << 2], mn[N << 2];
int n, r, s;

void build(int x, int low, int high) {
    l[x] = low, h[x] = high;
    if(l[x] == h[x]) return;
    int mid = low + high >> 1;
    build(x << 1, low, mid);
    build(x << 1 | 1, mid + 1, high);
}

void push(int x, int v) {
    mx[x] += v, mn[x] += v, lz[x] += v;
}

void down(int x) {
    if(l[x] == h[x] || lz[x] == 0) return;
    push(x << 1, lz[x]);
    push(x << 1 | 1, lz[x]);
    lz[x] = 0;
}

void update(int x, int low, int high, int val) {
    down(x);
    if(l[x] > high || h[x] < low) return;
    if(low <= l[x] && h[x] <= high) {
        push(x, val);
        return;
    }
    update(x << 1, low, high, val);
    update(x << 1 | 1, low, high, val);
    mx[x] = max(mx[x << 1], mx[x << 1 | 1]);
    mn[x] = min(mn[x << 1], mn[x << 1 | 1]);
}

int32_t main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    #define Task        "test"
    if(fopen(Task".inp", "r")) {
        freopen(Task".inp", "r", stdin);
        freopen(Task".out", "w", stdout);
    }
    cin >> n; build(1, 1, n);
    for(int i = 1; i <= n; ++i) {
        cin >> r >> s;
        update(1, 1, r, s == 1? 1: -1);
        if(mn[1] >= 0 && mx[1] > 0) cout << ">\n";
        else if(mn[1] < 0 && mx[1] <= 0) cout << "<\n";
        else cout << "?\n";
    }
}

Compilation message

stones.cpp: In function 'void build(int, int, int)':
stones.cpp:21:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     int mid = low + high >> 1;
               ~~~~^~~~~~
stones.cpp: In function 'int32_t main()':
stones.cpp:55:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(Task".inp", "r", stdin);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
stones.cpp:56:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(Task".out", "w", stdout);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 0 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 1 ms 384 KB Output is correct
8 Correct 1 ms 512 KB Output is correct
9 Correct 1 ms 512 KB Output is correct
10 Correct 6 ms 1152 KB Output is correct
11 Correct 42 ms 3448 KB Output is correct
12 Correct 73 ms 6392 KB Output is correct
13 Correct 60 ms 6520 KB Output is correct
14 Correct 61 ms 6520 KB Output is correct
15 Correct 65 ms 6524 KB Output is correct
16 Correct 64 ms 6520 KB Output is correct
17 Correct 60 ms 6520 KB Output is correct
18 Correct 62 ms 6520 KB Output is correct
19 Correct 61 ms 6520 KB Output is correct
20 Correct 62 ms 6520 KB Output is correct
21 Correct 62 ms 6520 KB Output is correct
22 Correct 63 ms 6520 KB Output is correct
23 Correct 61 ms 6520 KB Output is correct
24 Correct 72 ms 6472 KB Output is correct
25 Correct 61 ms 6520 KB Output is correct