Submission #259349

#TimeUsernameProblemLanguageResultExecution timeMemory
259349karmaWeighting stones (IZhO11_stones)C++14
100 / 100
73 ms6524 KiB
#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 (stderr)

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);
         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...