結果
| 問題 | 
                            No.511 落ちゲー 〜手作業のぬくもり〜
                             | 
                    
| コンテスト | |
| ユーザー | 
                             vjudge1
                         | 
                    
| 提出日時 | 2025-02-22 20:55:31 | 
| 言語 | C++17  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,303 bytes | 
| コンパイル時間 | 2,305 ms | 
| コンパイル使用メモリ | 200,856 KB | 
| 実行使用メモリ | 12,800 KB | 
| 最終ジャッジ日時 | 2025-02-22 20:55:37 | 
| 合計ジャッジ時間 | 5,755 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | WA * 5 | 
| other | WA * 32 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
struct BIT {
	int N;
	vector<ll> tr;
	BIT(int len) {
		N = len;
		tr.assign(len + 5, 0);
	}
	int lowbit(int x) {
		return x & -x;
	}
	void add(int x, ll v) {
		for (int i = x; i <= N; i += lowbit(i)) 
			tr[i] += v;
	}
	ll sum(int x) {
		ll ret = 0;
		for (int i = x; i; i -= lowbit(i))
			ret += tr[i];
		return ret;
	}
};
typedef pair<int, ll> pii;
int n, w;
ll h;
int a[N], b[N], x[N];
int main(){
  	cin >> n >> w >> h;
  	for (int i = 1; i <= n; i++)
    	cin >> a[i] >> b[i] >> x[i];
  	vector<vector<pii> > add(w + 5);
  	for (int i = 1; i <= n; i++){
    	add[x[i]].push_back(make_pair(i, b[i]));
    	add[x[i] + a[i]].push_back(make_pair(i, -b[i]));
  	}
  	ll A = 0, B = 0;
  	BIT bit(n);
  	for (int i = 1; i <= w; i++) {
    	for (auto P: add[i])
      		bit.add(P.first, P.second);
   		int l = 0, r = n + 1; 
    	while (r - l > 1) {
      		int mid = (r + l) / 2;
      		if (bit.sum(mid) >= h)
        		r = mid;
      		else 
        		l = mid;
    	}
    	if (r != n + 1) {
      		if (r % 2 == 1)
        		A++;
      		else
        		B++;
    	}
  	}
  	if (A > B)
  		puts("A");
  	else if (A < B)
  		puts("B");
  	else
  		puts("DRAW");
  	cout << A << ' ' << B << endl;
  	return 0;
}
            
            
            
        
            
vjudge1