結果

問題 No.2462 七人カノン
ユーザー anago-pie
提出日時 2023-09-08 23:13:26
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 616 ms / 2,000 ms
コード長 1,165 bytes
コンパイル時間 2,175 ms
コンパイル使用メモリ 195,596 KB
実行使用メモリ 33,728 KB
最終ジャッジ日時 2024-06-26 16:33:00
合計ジャッジ時間 14,088 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 23
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#include <iterator>
using namespace std;
#define rep(i, n) for(int i=0; i<n; i++)
#define debug 1
using ll = long long;
using ld = long double;
const int mod = 998244353;
const double pi = atan2(0, -1);
#include <time.h>
#include <chrono>

int main() {
	int N, Q;
	cin >> N >> Q;
	vector<double> ans(N + 1, 0);
	set<int> list;
	map<int, vector<int>> mp;
	unordered_set<int> play;
	vector<vector<vector<int>>> ord(N + 1);
	int sum = 0;
	int now = 0;
	vector<double> tl(100002);
	rep(i, Q) {
		int p, s, t;
		cin >> p >> s >> t;
		s++;
		t++;
		list.insert(s);
		list.insert(t);
		mp[s].push_back(p);
		mp[t].push_back(p);
		ord[p].push_back({ s,t });
	}
	for(int time = 1; time < 100002;time++) {
		if (list.count(time)) {
			for (int x : mp[time]) {
				if (play.count(x)) {
					play.erase(x);
					sum--;
				}
				else {
					play.insert(x);
					sum++;
				}
			}
		}
		if (sum >= 1) {
			tl[time] = (double)1 / (double)sum;
		}
		tl[time] += tl[time - 1];
	}
	for (int i = 1; i <= N; i++) {
		for (vector<int> v : ord[i]) {
			ans[i] += tl[v[1]-1] - tl[v[0] - 1];
		}
		cout << fixed << setprecision(10);
		cout << ans[i] << endl;
	}
}
0