結果

問題 No.3085 Easy Problems
ユーザー 回転
提出日時 2025-04-04 21:34:43
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 801 ms / 2,000 ms
コード長 1,042 bytes
コンパイル時間 1,493 ms
コンパイル使用メモリ 121,400 KB
実行使用メモリ 14,524 KB
最終ジャッジ日時 2025-04-04 21:37:31
合計ジャッジ時間 25,614 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 31
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <tuple>
#include <map>
#include <algorithm>

using namespace std;

int main() {
    int N;
    cin >> N;
    vector<tuple<int, int, int>> all;

    // N個の入力
    for (int i = 0; i < N; ++i) {
        int a, b;
        cin >> a >> b;
        all.emplace_back(a, -1, b);
    }

    int Q;
    cin >> Q;

    // Q個のクエリ入力
    for (int i = 0; i < Q; ++i) {
        int x, y;
        cin >> x >> y;
        all.emplace_back(x, i, y);
    }

    // (a, c, b) でソート
    sort(all.begin(), all.end());

    vector<int> ans(Q, -1);
    map<int, int> bunya;  // defaultdict(int) 相当
    int prob_count = 0;

    // 全体を処理
    for (int i = 0; i < N + Q; ++i) {
        int a, c, b;
        tie(a, c, b) = all[i];

        if (c == -1) {
            bunya[b]++;
            prob_count++;
        } else {
            ans[c] = prob_count - bunya[b];
        }
    }

    // 出力
    for (int i = 0; i < Q; ++i) {
        cout << ans[i] << endl;
    }

    return 0;
}
0