結果
| 問題 |
No.2520 L1 Explosion
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-10-30 21:47:17 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 266 ms / 2,000 ms |
| コード長 | 1,386 bytes |
| コンパイル時間 | 4,532 ms |
| コンパイル使用メモリ | 260,732 KB |
| 最終ジャッジ日時 | 2025-02-17 17:04:52 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 22 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using ll = long long;
#define rep(i,n) for(int i=0;i<(int)(n);i++)
using mint = atcoder::modint998244353;
int main(){
ll n,m;
cin>>n>>m;
vector<ll> x(n),y(n),h(n);
rep(i,n) cin>>x.at(i)>>y.at(i)>>h.at(i);
vector<ll> a(n),b(n);
rep(i,n){
a.at(i)=x.at(i)+y.at(i);
b.at(i)=x.at(i)-y.at(i);
}
auto ca=a,cb=b;
rep(i,n){
ca.push_back(a.at(i)-(m-h.at(i)));
ca.push_back(a.at(i)+(m-h.at(i)));
cb.push_back(b.at(i)-(m-h.at(i)));
cb.push_back(b.at(i)+(m-h.at(i)));
}
sort(ca.begin(),ca.end());
sort(cb.begin(),cb.end());
int l=ca.size();
vector<vector<int>> vn(l+1,vector<int>(l+1,0));
rep(i,n){
int la=lower_bound(ca.begin(),ca.end(),a.at(i)-(m-h.at(i)))-ca.begin();
int ua=lower_bound(ca.begin(),ca.end(),a.at(i)+(m-h.at(i)))-ca.begin();
int lb=lower_bound(cb.begin(),cb.end(),b.at(i)-(m-h.at(i)))-cb.begin();
int ub=lower_bound(cb.begin(),cb.end(),b.at(i)+(m-h.at(i)))-cb.begin();
vn.at(la).at(lb)++;
vn.at(la).at(ub)--;
vn.at(ua).at(lb)--;
vn.at(ua).at(ub)++;
}
rep(i,l+1) rep(j,l) vn.at(i).at(j+1)+=vn.at(i).at(j);
rep(i,l) rep(j,l+1) vn.at(i+1).at(j)+=vn.at(i).at(j);
vector<mint> ans(n);
rep(i,l){
rep(j,l){
if(vn.at(i).at(j)==0) continue;
ans.at(vn.at(i).at(j)-1)+=(ca.at(i+1)-ca.at(i))*(cb.at(j+1)-cb.at(j));
}
}
rep(i,n) cout<<(ans.at(i)/2).val()<<endl;
}