神秘爆炸求调
查看原帖
神秘爆炸求调
800499
suzhikz楼主2024/7/9 16:32
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
int a[300005],b[300005];
int t;
struct node{
	int id,w;
};
vector<node>g[300005];
int ans[300005];
void solve(int l,int r,vector<int> q){
	if(l==r){
		for(int i=0;i<q.size();i++){
			ans[q[i]]=l;
		}
		return ;
	} 
	int cnt[300005]={0},mid=(l+r)/2,book=0;
	for(int i=1;i<=m;i++){
		for(int j=0;j<g[i].size();j++){
			if(g[i][j].id<-mid){
				book+=g[i][j].w;
			}
		}
		cnt[a[i]]+=book;
	}
	vector<int>ql,qr;
	for(int i=0;i<q.size();i++){
		if(cnt[q[i]]>=b[q[i]]){
			ql.push_back(q[i]);
		}else{
			qr.push_back(q[i]);
		}
	}
	solve(l,mid,ql);solve(mid+1,r,qr);
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++)cin>>b[i];
	cin>>t;
	node book;
	for(int ql,qr,c,i=1;i<=t;i++){
		cin>>ql>>qr>>c;
		if(ql>qr){
			book.w=c;book.id=i;
			g[ql].push_back(book);
			g[1].push_back(book);
			book.w=-c;
			g[qr+1].push_back(book);
		}else{
			book.w=c;book.id=i;
			g[ql].push_back(book);
			book.w=-c;
			g[qr+1].push_back(book);
		}
	}
	vector<int>q;
	for(int i=1;i<=n;i++)q.push_back(i);
	solve(1,t+1,q);
	for(int i=1;i<=n;i++){
		if(ans[i]==t+1)puts("NIE");
		else cout<<ans[i]<<endl;
	}
	return 0;
}

2024/7/9 16:32
加载中...