結果
問題 |
No.3085 Easy Problems
|
ユーザー |
|
提出日時 | 2025-04-04 21:39:42 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,216 bytes |
コンパイル時間 | 1,465 ms |
コンパイル使用メモリ | 117,668 KB |
実行使用メモリ | 27,308 KB |
最終ジャッジ日時 | 2025-04-04 21:40:36 |
合計ジャッジ時間 | 6,858 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | TLE * 1 -- * 30 |
ソースコード
#include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; class SortedMultiset { public: multiset<int> ms; void add(int x) { ms.insert(x); } bool discard(int x) { auto it = ms.find(x); if (it != ms.end()) { ms.erase(it); return true; } return false; } int count(int x) { return ms.count(x); } int index_right(int x) { return distance(ms.begin(), ms.upper_bound(x)); } }; int main() { int n; cin >> n; vector<pair<int, int>> items(n); for (int i = 0; i < n; ++i) { cin >> items[i].first >> items[i].second; } sort(items.begin(), items.end()); vector<SortedMultiset> cnt(100030); vector<int> idxs; for (int i = 0; i < n; ++i) { idxs.push_back(items[i].first); cnt[items[i].second].add(items[i].first); } sort(idxs.begin(), idxs.end()); int q; cin >> q; for (int i = 0; i < q; ++i) { int x, y; cin >> x >> y; int ans = upper_bound(idxs.begin(), idxs.end(), x) - idxs.begin() - cnt[y].index_right(x); cout << ans << "\n"; } return 0; }