记录编号 600820 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 天天爱射击 最终得分 100
用户昵称 Gravatar健康铀 是否通过 通过
代码语言 C++ 运行时间 4.893 s
提交时间 2025-05-19 15:30:26 内存使用 36.28 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define N 200000
int n, m, l, r, x, mx, now, cnt, lst, ans[200010], t[200010];
struct node{
	int l, r, val;
}a[200010];
struct ask{
	int x, y;
	bool operator < (const ask &A) const{
		return x < A.x;
	}
}q[200010];
struct segment{
	int l, r, s;
}d[5000010];
void modify(int &p, int lst, int l, int r, int x){
	if (!p || p == lst) d[p=++cnt]=d[lst];
	d[p].s ++;
	if (l == r) return ;
	int mid = l + r >> 1;
	if (x <= mid) modify(d[p].l, d[lst].l, l, mid, x);
	else modify(d[p].r, d[lst].r, mid+1, r, x);
}
int query(int p, int lst, int l, int r, int x){
	if (x > d[p].s - d[lst].s) return 0;
	if (l == r) return l;
	int mid = l + r >> 1, dif = d[d[p].l].s - d[d[lst].l].s;
	if (dif >= x) return query(d[p].l, d[lst].l, l, mid, x);
	else return query(d[p].r, d[lst].r, mid+1, r, x-dif);
}
int main(){
		freopen("shooting.in","r",stdin);
			freopen("shooting.out","w",stdout);
	scanf ("%d%d", &n, &m);
	for (int i=1; i<=n; i++){
		scanf ("%d%d%d", &a[i].l, &a[i].r, &a[i].val);
		mx = max(mx, a[i].r);
	}
	for (int i=1; i<=m; i++){
		scanf ("%d", &q[i].x);
		q[i].y = i;
	}
	sort (q+1, q+m+1);
	for (int i=1; i<=m; i++){
		for (int j=lst+1; j<q[i].x; j++){
			t[j] = t[j-1];
		}
		modify(t[q[i].x], t[q[i].x-1], 1, N, q[i].y);
		lst = q[i].x;
	}
	for (int i=lst+1; i<=mx; i++) t[i] = t[i-1];
	for (int i=1; i<=n; i++){
		now = query(t[a[i].r], t[a[i].l-1], 1, N, a[i].val);
		ans[now] ++;
	}
	for (int i=1; i<=m; i++){
		printf ("%d\n", ans[i]);
	}
	return 0;
}