Submission #602346

#TimeUsernameProblemLanguageResultExecution timeMemory
602346CyberCowSnowball (JOI21_ho_t2)C++17
100 / 100
148 ms14012 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <string>
#include <cmath>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <fstream>
#include <iomanip>
#include <iterator>
#include <stack>
#include <deque>
using namespace std;
using ll = long long;
vector<ll> v;
vector<pair<ll, pair<ll, ll>>> p;
ll ans[200005];

void solve()
{
	int n, i, j, q;
	cin >> n >> q;
	ll x, oo = 1000000000000000000LL;
	v.push_back(-oo);
	for ( i = 0; i < n; i++)
	{
		cin >> x;
		v.push_back(x);
	}
	v.push_back(oo);
	p.push_back({ 0,{ 0, 0 } });
	ll tex = 0;
	for ( i = 0; i < q; i++)
	{
		cin >> x;
		tex += x;
		pair<ll, pair<ll, ll>>anc = p.back();
		anc.second.first = max(anc.second.first, tex);
		anc.second.second = min(anc.second.second, tex);
		anc.first = anc.second.first - anc.second.second;
		p.push_back(anc);
	}
	sort(p.begin(), p.end());
	int ind;
	for (i = 1; i <= n; i++)
	{
		ind = lower_bound(p.begin(), p.end(), make_pair(v[i] - v[i - 1], make_pair(0LL, 0LL))) - p.begin();
		if (ind == p.size())
			ans[i] -= p[ind - 1].second.second;
		else
		{
			if (p[ind].second.second != p[ind - 1].second.second)
				ans[i] += v[i] - v[i - 1] - p[ind].second.first;
			else
				ans[i] += -p[ind].second.second;
		}
		ind = lower_bound(p.begin(), p.end(), make_pair(v[i + 1] - v[i], make_pair(0LL, 0LL))) - p.begin();
		if (ind == p.size())
			ans[i] += p[ind - 1].second.first;
		else
		{
			if (p[ind].second.first != p[ind - 1].second.first)
				ans[i] += v[i + 1] - v[i] - -p[ind].second.second;
			else
				ans[i] += p[ind].second.first;
		}
	}
	for ( i = 1; i <= n; i++)
	{
		cout << ans[i] << '\n';
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	int tt = 1;
	//cin >> tt;
	while (tt--)
	{
		solve();
	}
	return 0;
}

Compilation message (stderr)

Main.cpp: In function 'void solve()':
Main.cpp:51:11: 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]
   51 |   if (ind == p.size())
      |       ~~~~^~~~~~~~~~~
Main.cpp:61:11: 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]
   61 |   if (ind == p.size())
      |       ~~~~^~~~~~~~~~~
Main.cpp:24:12: warning: unused variable 'j' [-Wunused-variable]
   24 |  int n, i, j, q;
      |            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...