Algorithm/problem
백준 10800 : 컬러볼 누적합, 투포인터 활용 C++
DingCoDing
2022. 2. 14. 15:45
반응형
https://www.acmicpc.net/problem/10800
10800번: 컬러볼
첫 줄에는 공의 개수를 나타내는 자연수 N이 주어진다(1 ≤ N ≤ 200,000). 다음 N개의 줄 중 i번째 줄에는 i번째 공의 색을 나타내는 자연수 Ci와 그 크기를 나타내는 자연수 Si가 주어진다(1 ≤ Ci ≤ N
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
struct Ball {
int idx, color, size;
bool operator<(const Ball& b) const {
if (size == b.size) return idx < b.idx;
else return size < b.size;
}
};
int color[200001], sum;
int ans[200001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
vector<Ball> v;
v.push_back({ 0,0,0 });
for (int i = 1; i <= n; i++) {
int a, b;
cin >> a >> b;
v.push_back({ i,a,b });
}
sort(v.begin(), v.end());
for (int i = 1, j = 1; i <= n; i++) {
while (v[i].size > v[j].size) {
sum += v[j].size;
color[v[j].color] += v[j].size;
j++;
}
ans[v[i].idx] = sum - color[v[i].color];
}
for (int i = 1; i <= n; i++) {
cout << ans[i] << '\n';
}
return 0;
}
반응형