Submission

Status:

[PPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: Nagornz

Problemset: ฮีโร่และมอนสเตอร์

Language: cpp

Time: 0.228 second

Submitted On: 2025-11-04 06:53:34

#include <bits/stdc++.h>
#define int long long
using namespace std;

int32_t main() {
    cin.tie(NULL)->sync_with_stdio(false);

    // input
    int n, m;
    cin >> n >> m;
    vector <int> a(n), ans(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    vector <pair <int, int>> mon(m);
    for (int i = 0; i < m; i++) {
        cin >> mon[i].first >> mon[i].second; // P[i], C[i]
    }

    sort(mon.begin(), mon.end()); // เรียงช้อมูลตามค่า P

    vector <int> power(m);
    for (int i = 0; i < m; i++) {
        power[i] = mon[i].first; // ดึงค่า P มาเก็บใน Array ใหม่
    }

    // Prefix Sum ของ C[i]
    vector <int> pref(m);
    pref[0] = mon[0].second;
    for (int i = 1; i < m; i++) {
        pref[i] = pref[i - 1] + mon[i].second;
    }

    // หาคำตอบของฮีโร่แต่ละคนโดยการใช้ Binary Search
    for (int i = 0; i < n; i++) {
        int idx = upper_bound(power.begin(), power.end(), a[i]) - power.begin() - 1; // หา index (ในที่นี้ ตั้งชื่อว่า idx)
        if (idx < 0) continue; // idx < 0 นั่นคือ ฮีโร่คนที่ i ไม่สามารถชนะมอนสเตอร์ตัวไหนได้เลย
        ans[i] = pref[idx]; // คำตอบของฮีโร่คนที่ i คือ pref[idx]
    }

    // Output
    for (int i = 0; i < n; i++) {
        cout << ans[i] << "\n";
    }

    return 0;
}