답안 #860311

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
860311 2023-10-12T14:24:35 Z pctirziu Deda (COCI17_deda) C++17
140 / 140
451 ms 6196 KB
#include <iostream>

using namespace std;

const int nmax = 3e5 + 5;
const int valmax = 2e9 + 5;
int aint[nmax * 4];

void update(int node, int st, int dr, int l, int r, int val)
{
    if(st > r or dr < l)
        return ;
    if(st == dr){
        aint[node] = val;
        return;
    }
    int mid = (st + dr) / 2;
    update(node * 2, st, mid, l, r, val);
    update(node * 2 + 1, mid + 1, dr, l, r, val);
    aint[node] = min(aint[2 * node], aint[2 * node + 1]);
}

int query(int node, int st, int dr, int l, int r, int val)
{
    if(st > r or dr < l)
        return -1;
    if(l <= st and dr <= r){
        if(aint[node] > val)
            return -1;
        int rasp;
        while(st <= dr){
            int mid = (st + dr) / 2;
            if(st == dr){
                if(aint[node] <= val)
                    return st;
            }
            if(aint[2 * node] <= val){
                dr = mid;
                rasp = mid;
                node = node * 2;
            }
            else{
                st = mid + 1;
                node = node * 2 + 1;
            }
        }
        return rasp;
    }
    int mid = (st + dr) / 2;
    int rasp = query(node * 2, st, mid, l, r, val);
    if(rasp != -1)
        return rasp;
    return query(node * 2 + 1, mid + 1, dr, l, r, val);
}

int main()
{
    int n, q;
    cin >> n >> q;
    for(int i = 0; i <= 4 * nmax; i++)
        aint[i] = valmax;
    while(q--){
        string s;
        cin >> s;
        if(s == "M"){
            int x, y;
            cin >> x >> y;
            update(1, 1, n, y, y, x);
        }
        else{
            int x, y;
            cin >> x >> y;
            cout << query(1, 1, n, y, n, x) << "\n";
        }
    }
}

Compilation message

deda.cpp: In function 'int main()':
deda.cpp:61:17: warning: iteration 1200020 invokes undefined behavior [-Waggressive-loop-optimizations]
   61 |         aint[i] = valmax;
      |         ~~~~~~~~^~~~~~~~
deda.cpp:60:22: note: within this loop
   60 |     for(int i = 0; i <= 4 * nmax; i++)
      |                    ~~^~~~~~~~~~~
deda.cpp: In function 'int query(int, int, int, int, int, int)':
deda.cpp:30:13: warning: 'rasp' may be used uninitialized in this function [-Wmaybe-uninitialized]
   30 |         int rasp;
      |             ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4956 KB Output is correct
2 Correct 2 ms 4956 KB Output is correct
3 Correct 9 ms 4956 KB Output is correct
4 Correct 451 ms 6088 KB Output is correct
5 Correct 312 ms 5836 KB Output is correct
6 Correct 346 ms 6196 KB Output is correct
7 Correct 359 ms 5968 KB Output is correct