比赛 2024暑假C班集训B 评测结果 AAAAAATTTTTTTTTTTTTT
题目名称 天天爱射击 最终得分 30
用户昵称 dream 运行时间 56.024 s
代码语言 C++ 内存使用 5.02 MiB
提交时间 2024-07-11 09:59:48
显示代码纯文本
#include<bits/stdc++.h>
#define ls p*2
#define rs p*2+1
using namespace std;
typedef long long ll;
const int N=200005;
int mk[N];
int read(){
	char c;
	int f=1,sum=0;
	c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-'){
			f=-1;
		}
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		sum=sum*10+c-'0';
		c=getchar();
	}
	return sum*f;
}
struct node{
    int l,r;
    ll sum,add;
}tr[N*4];
int n,m;
int mb[N][3];
void pushup(int p){
	tr[p].sum=tr[ls].sum+tr[rs].sum;
}
void build(int p,int l,int r){
	tr[p].l=l,tr[p].r=r;
	if(l==r){
		tr[p].sum=0;
		return;
	}
	int mid=(l+r)/2;
	build(ls,l,mid);
	build(rs,mid+1,r);
	pushup(p);
}
void pushdown(int p){
	tr[ls].sum+=tr[p].add*(tr[ls].r-tr[ls].l+1);
	tr[rs].sum+=tr[p].add*(tr[rs].r-tr[rs].l+1);
	tr[ls].add+=tr[p].add;
	tr[rs].add+=tr[p].add;
	tr[p].add=0;
}
void update(int p,int l,int r,int v){
	if(l<=tr[p].l&&tr[p].r<=r){
		tr[p].sum+=(tr[p].r-tr[p].l+1)*v;
		tr[p].add+=v;
		return ;
	}
	pushdown(p);
	int mid=(tr[p].l+tr[p].r)/2;
	if(l<=mid){
		update(ls,l,r,v);
	}
	if(r>mid){
		update(rs,l,r,v);
	}
	pushup(p);
}
ll query(int p,int l,int r){
	if(l<=tr[p].l&&tr[p].r<=r){
		return tr[p].sum;
	}
	pushdown(p);
	int mid=(tr[p].l+tr[p].r)/2;
	ll res=0;
	if(l<=mid){
		res+=query(ls,l,r);
	}
	if(r>mid){
		res+=query(rs,l,r);
	}
	return res;
}
struct node2{
	int x1,x2,s;
};
int main(){
//	n*n*log2(n);
	ios::sync_with_stdio(0);
	freopen("shooting.in","r",stdin);
	freopen("shooting.out","w",stdout);
    n=read();
    m=read(); 
    queue<node2> q;
    for(int i=1;i<=n;i++){
        int x1,x2,v;
        x1=read();
        x2=read();
        v=read();
        q.push({x1,x2,v});
    }
//    build(1,1,n);
    for(int i=1;i<=m;i++){
    	int x;
    	x=read();
//    	update(1,x,x,1);
    	int res=0;
    	
    	int mx=q.size();
//    	for(int i=1;i<=q.size();i++){
//    		node2 t;
//    		t=q.front();
//    		q.pop();
//    		if(query(1,t.x1,t.x2)>t.s){
//    			res++;
//			}
//			else{
//				q.push(t);
//			}
//		}
    	
    	for(int i=1;i<=mx;i++){
    		node2 t;
    		t=q.front();
    		q.pop();
    		if(t.x1<=x&&t.x2>=x){
    			t.s--;
			}
			if(t.s<=0){
				res++;
			}
			else{
				q.push(t);
			}
		}
    	
		printf("%d\n",res);
	}
    return 0;
}