제출 #1148428

#제출 시각아이디문제언어결과실행 시간메모리
1148428adlin새로운 문제 (POI11_met)C++20
24 / 100
6095 ms7748 KiB
#include <bits/stdc++.h>
#define pb push_back
#define F first
#define S second
#define all(v) v.begin(),v.end()

using namespace std;

typedef long long ll;

const int maxn = 3e5 + 5;

int n,m,k,a[maxn],p[maxn];

int leftt[maxn],rightt[maxn],val[maxn];

ll b[maxn];

int main(){
	
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> m;
	
	for(int i = 1; i <= m; i++) cin >> a[i];
	for(int i = 1; i <= n; i++) {
		cin >> p[i];
	}
	cin >> k;
	for(int i = 1; i <= k; i++){
		cin >> leftt[i] >> rightt[i] >> val[i];
	}
	for(int i = 1; i <= n; i++){
		int l = 1, r = k;
		int ind = 0;
		while(l <= r){
			int md = (l + r) >> 1;
			for(int j = 1; j <= m; j++) b[j] = 0;
			for(int j = 1; j <= md; j++){
				if(leftt[j] > rightt[j]){
					b[leftt[j]] += val[j];
					b[1] += val[j];
					b[rightt[j] + 1] -= val[j];
				}
				else {
					b[leftt[j]] += val[j];
					b[rightt[j] + 1] -= val[j];
				}
			}
			ll sum = 0;
			for(int j = 1; j <= m; j++){
				b[j] += b[j - 1];
				if(a[j] == i) sum += b[j];
			}
			if(sum >= p[i]){
				ind = md;
				r = md - 1;
			}
			else {
				l = md + 1;
			}
		}
		if(ind) cout << ind << '\n';
		else cout << "NIE\n";
	}
	
	return 0;
}
#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...