Submission #8838

#TimeUsernameProblemLanguageResultExecution timeMemory
8838baneling100Weighting stones (IZhO11_stones)C++98
100 / 100
64 ms4156 KiB
#include <stdio.h>
#include <algorithm>

using namespace std;

int N, R, S, M, Value, Max[262144], Min[262144], Idx[262144];

void SegTree(int Left, int Right, int Loc) {

    int Mid = (Left + Right) / 2;

    if(Right <= R) {
        Max[Loc] += Value;
        Min[Loc] += Value;
        Idx[Loc] += Value;
    }
    else {
        Max[2 * Loc] += Idx[Loc];
        Min[2 * Loc] += Idx[Loc];
        Idx[2 * Loc] += Idx[Loc];
        Max[2 * Loc + 1] += Idx[Loc];
        Min[2 * Loc + 1] += Idx[Loc];
        Idx[2 * Loc + 1] += Idx[Loc];
        Idx[Loc] = 0;
        SegTree(Left, Mid, 2 * Loc);
        if(Mid + 1 <= R)
            SegTree(Mid + 1, Right, 2 * Loc + 1);
        Max[Loc] = max(Max[2 * Loc], Max[2 * Loc + 1]);
        Min[Loc] = min(Min[2 * Loc], Min[2 * Loc + 1]);
    }
}

int main(void) {

    int i;

    scanf("%d", &N);
    for(M = 1 ; M < N ; M *= 2);
    for(i = 1 ; i <= N ; i++) {
        scanf("%d %d", &R, &S);
        if(S == 1)
            Value = 1;
        else
            Value = -1;
        SegTree(1, M, 1);
        if(Min[1] >= 0)
            printf(">\n");
        else if(Max[1] <= 0)
            printf("<\n");
        else
            printf("?\n");
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...