제출 #574297

#제출 시각아이디문제언어결과실행 시간메모리
574297benson1029Snowball (JOI21_ho_t2)C++14
100 / 100
143 ms13868 KiB
#include<bits/stdc++.h>
using namespace std;

int n, q;
long long pos[200005];
long long x, sum;
long long lmax, rmax;
vector< pair<long long, pair<long long,long long> > > a, b;

int main() {
	ios::sync_with_stdio(false);
	cin >> n >> q;
	for(int i=1; i<=n; i++) cin >> pos[i];
	sum = 0;
	lmax = rmax = 0;
	while(q--) {
		cin >> x;
		sum += x;
		if(x < 0 && sum < lmax) {
			lmax = sum;
			a.push_back({-lmax+rmax, {lmax, rmax} });
		} else if(x > 0 && sum > rmax) {
			rmax = sum;
			b.push_back({-lmax+rmax, {lmax, rmax} });
		}
	}
	for(int i=1; i<=n; i++) {
		long long ans = 0;
		if(i == 1) {
			if(a.size() > 0)
				ans += -a[a.size()-1].second.first;
		} else {
			long long gap = pos[i] - pos[i-1];
			int p = lower_bound(a.begin(), a.end(), make_pair(gap, make_pair(0LL,0LL))) - a.begin();
			long long tmp = 0;
			if(p > 0) tmp = max(tmp, -a[p-1].second.first);
			if(p < a.size()) tmp = max(tmp, gap-a[p].second.second);
			ans += tmp;
		}
		
		if(i == n) {
			if(b.size() > 0)
				ans += b[b.size()-1].second.second;
		} else {
			long long gap = pos[i+1] - pos[i];
			int p = lower_bound(b.begin(), b.end(), make_pair(gap, make_pair(0LL,0LL))) - b.begin();
			long long tmp = 0;
			if(p > 0) tmp = max(tmp, b[p-1].second.second);
			if(p < b.size()) tmp = max(tmp, gap+b[p].second.first);
			ans += tmp;
		}
		cout << ans << "\n";
	}
}

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'int main()':
Main.cpp:37:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |    if(p < a.size()) tmp = max(tmp, gap-a[p].second.second);
      |       ~~^~~~~~~~~~
Main.cpp:49:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |    if(p < b.size()) tmp = max(tmp, gap+b[p].second.first);
      |       ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...