답안 #1000918

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1000918 2024-06-18T11:19:21 Z wangziyanmo Meteors (POI11_met) C++14
74 / 100
501 ms 65536 KB
#include <bits/stdc++.h>
using namespace std;
 
#define int long long
 
const int mxn=300000;
vector<int> belong[mxn+10];
int tar[mxn+10];
int l[mxn+10],r[mxn+10],mid[mxn+10],num[mxn+10];
int tree[mxn+10];
 
struct node{
	int l1,r1,l2,r2,x,time;
} event[mxn];
 
bool cmp(node a,node b){
	if (a.time<b.time || (a.time==b.time && a.x>b.x)) return true;
	return false;
}
 
bool finished(int q){
	for (int i=1;i<=q;i++) if (l[i]!=r[i]) return 0;
	return 1;
}
 
void add(int x,int num){
	if (x>mxn) return;
	while (x<=mxn){
		tree[x]+=num;
		x+=x&(-x);
	}
}
 
int que(int x){
	int ans=0;
	while (x>0){
		ans+=tree[x];
		x-=x&(-x);
	}
	return ans;
}
 
signed main(){
	ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int n,m;cin>>n>>m;
	for (int i=1;i<=m;i++){
		int x;cin>>x;
		belong[x].push_back(i);
	}
	for (int i=1;i<=n;i++){
		cin>>tar[i];
	}
	int q;cin>>q;
	for (int i=1;i<=n;i++) l[i]=1,r[i]=q+1;
	for (int i=1;i<=q;i++){
		int l,r,x;cin>>l>>r>>x;
		if (r<l){
			event[i]={l,m,1,r,x,i};
		}
		else event[i]={l,r,-1,-1,x,i};
	}
	event[q+1]={1,n,-1,-1,(int)1e9,q+1};
	while (!finished(n)){
		for (int i=1;i<=mxn+5;i++){
			num[i]=tree[i]=0;
		}
		for (int i=1;i<=n;i++) mid[i]=l[i]+(r[i]-l[i])/2;
		vector<node> qu;
		for (int i=1;i<=n;i++){
			qu.push_back({-1,-1,-1,-1,-i,mid[i]});
		}
		for (int i=1;i<=q;i++) qu.push_back({event[i]});
		sort(qu.begin(),qu.end(),cmp);
		for (auto x:qu){
			if (x.x<0){
				x.x*=-1;
				for (auto a:belong[x.x]){
					num[x.x]+=que(a);
				}
			}
			else{
				add(x.l1,x.x);add(x.r1+1,-x.x);
				if (x.l2>0){
					add(x.l2,x.x);add(x.r2+1,-x.x);
				}
			}
		}
		for (int i=1;i<=n;i++){
			if (l[i]==r[i]) continue;
			if (num[i]>=tar[i]){
				r[i]=mid[i];
			}
			else l[i]=mid[i]+1;
		}
	}
	for (int i=1;i<=n;i++){
		if (l[i]==q+1) cout<<"NIE\n";
		else cout<<l[i]<<"\n";
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 21500 KB Output is correct
2 Correct 8 ms 21528 KB Output is correct
3 Correct 8 ms 21512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 21500 KB Output is correct
2 Correct 8 ms 21532 KB Output is correct
3 Correct 8 ms 21548 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 215 ms 28348 KB Output is correct
2 Correct 501 ms 32756 KB Output is correct
3 Correct 278 ms 28944 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 288 ms 28672 KB Output is correct
2 Correct 323 ms 28688 KB Output is correct
3 Correct 398 ms 32808 KB Output is correct
4 Correct 79 ms 26904 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 273 ms 28400 KB Output is correct
2 Correct 431 ms 32932 KB Output is correct
3 Correct 235 ms 29464 KB Output is correct
4 Correct 319 ms 32292 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 281 ms 27988 KB Output is correct
2 Correct 291 ms 30592 KB Output is correct
3 Correct 257 ms 28200 KB Output is correct
4 Correct 350 ms 32856 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 296 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 288 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -