Atcoder Weekday Contest 076
Atcoder Weekday Contest 076 풀이
5/25/2026 · 3 min read
그냥 구현해주면 된다. 간단쓰
int s, p, r, m;
auto Mint = [](){
cin >> s >> p >> r >> m;
for(int i = 0; i < m; i++){
int e, x; cin >> e >> x;
if(e == 1) s += x;
else s -= (p * x);
}
cout << s - r << "\n";
};Time
정렬
int n;
vector<array<int, 3>> v;
auto Mint = [](){
cin >> n;
for(int i = 0; i < n; i++){
int a,b; cin >> a >> b;
v.pb({a, b, i + 1});
}
sort(all(v), [&](auto& a, auto& b){
return (a[1] == b[1] ? (a[0] == b[0] ? a[2] < b[2] : a[0] > b[0]) : a[1] > b[1]);
});
for(const auto& [a, b, c] : v) cout << c << "\n";
};Time
문제의 조건대로 "잘" 구현해주면 된다. 코드는 생략
이것도 구현인데 왜 이번 세트가 유독 이런게 많은 것 같지?
요즘 들어서 AWC에서 보이는 세그 + 오프라인 쿼리 문제인데 그냥 기본 난이도라 쉽게 풀린다.
struct segtree{
const int sz = 1 << 17;
vector<int> tree;
segtree():tree(sz << 1){}
void update(int i, int val){
--i |= sz; tree[i] += val;
while(i >>= 1) tree[i] = tree[i << 1] + tree[i << 1 | 1];
}
int query(int l, int r){
int ret = 0;
--l |= sz; --r |= sz;
while(l <= r){
if(l & 1) ret += tree[l++];
if(~r & 1) ret += tree[r--];
l >>= 1, r >>= 1;
}
return ret;
}
};
int n,k, q;
void Main(){
ri(n, k, q);
vector<array<int, 2>> D;
for(int i = 1; i <= n; i++){
int x; ri(x); D.push_back({x, i});
}
sort(D.begin(), D.end());
segtree seg;
vector<array<int, 4>> query;
for(int i = 0; i < q; i++){
int a,b,c; ri(a, b, c);
query.push_back({a, b, c, i});
}
sort(query.begin(), query.end(), [&](auto& a, auto& b){
return a[2] < b[2];
});
int idx = 0;
vector<int> res(q);
for(const auto& [l, r, t, I] : query){
while(idx < n and D[idx][0] <= t){
seg.update(D[idx][1], 1);
idx++;
}
int s = seg.query(l, r);
res[I] = (s <= k ? s : -1);
}
for(const auto& i : res) po(i);
}총평
온 세상이 그냥 웰노운이다... 세그 구현이 슬슬 귀찮은데 그냥 템플릿을 짜놔야하나?