[ABC221D] Online games 题解
[ABC221D] Online games 题解
思路解析
可以发现题目就是单纯区间加和查询每一个值有多少次出现。首先看到区间修改加结束时查询可以想到差分,但是通过
code
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, a[N], b[N], c[5 * N], ans[N];
int main() {
cin >> n;
vector<int> v;
for(int i = 1; i <= n; i++) {
cin >> a[i] >> b[i];
v.push_back(a[i]);
v.push_back(a[i] + b[i]);
}
v.push_back(n + 1);
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end()); //离散化去重
for(int i = 1; i <= n; i++) {
int pa = lower_bound(v.begin(), v.end(), a[i]) - v.begin() + 1;
int pb = lower_bound(v.begin(), v.end(), a[i] + b[i]) - v.begin() + 1;
c[pa]++; c[pb]--; //差分
}
for(int i = 1; i < v.size(); i++) {
c[i] += c[i - 1];
ans[c[i]] += v[i] - v[i - 1]; //统计区间
}
for(int i = 1; i <= n; i++) {
cout << ans[i] << ' ';
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步