제출 #1124577

#제출 시각아이디문제언어결과실행 시간메모리
1124577inksamurai새로운 문제 (POI11_met)C++20
24 / 100
6094 ms30648 KiB
#include <bits/stdc++.h>
#define pii pair<int,int>
#define int long long

using namespace std;

signed main(){
	ios::sync_with_stdio(0), cin.tie(0);

	int n, m;
	cin >> n >> m;
	
	vector<int> a(m);
	for(int i = 0; i < m; i++){
		cin >> a[i];
		a[i] -= 1;
	}
	
	vector <vector<int>> points(n);
	for(int i = 0; i < m; i++){
		points[a[i]].push_back(i);
	}
	
	vector<int> need(n);
	for(int i = 0; i < n; i++){
		cin >> need[i];
	}
	
	int k;
	cin >> k;
	vector<pii> events(k);
	vector<int> weight(k);
	for(int i = 0; i < k; i++){
		cin >> events[i].first >> events[i].second;
		events[i].first -= 1;
		events[i].second -= 1;
		cin >> weight[i];
	}
	
	vector<int> pns(n, k);
	vector<int> ql(n, 0), qr(n, k - 1);
	for(int iter = 0; iter < 30; iter++){
		vector <vector<int>> adqry(k);
		for(int i = 0; i < n; i++){
			if(ql[i] <= qr[i]){
				int md = (ql[i] + qr[i]) / 2;
//				if(i==0) cout<<md<<"\n";
				adqry[md].push_back(i);
			}
		}
		
//		cout << ql[2] << " " <<  qr[2] << "\n";
		
		vector<int> meteors(m);
		for(int i = 0; i < k; i++){
			int l = events[i].first;
			int r = events[i].second;
			while(l != r){
				meteors[l] += weight[i];
				l += 1;
				l %= m;
			}
			meteors[r] += weight[i];
			
			for(auto id : adqry[i]){
				int now = 0;
				for(auto x : points[id]){
//					if(id == 2) cout << x << "\n";
					now += meteors[x];
				}
//				if(id == 2) cout << now << " " << i << "\n";
				if(now >= need[id]){
					pns[id] = i;
					qr[id] = i - 1;
				} else {
					ql[id] = i + 1;
				}
			}
		}
	}
	
	for(int i = 0; i < n; i++){
		if(pns[i] == k) cout << "NIE\n";
		else cout << pns[i] + 1 << "\n";
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...