Submission #965460

# Submission time Handle Problem Language Result Execution time Memory
965460 2024-04-18T16:18:04 Z red24 Pilot (NOI19_pilot) C++14
0 / 100
44 ms 40284 KB
#include <bits/stdc++.h>
using namespace std;
 
#define int long long
#define vi vector<int>
#define pi pair<int, int>
#define vpi vector<pi>
#define vvi vector<vi>
#define mp make_pair
#define pb push_back
#define all(x) x.begin()+1, x.end()
const int INF = (int)1e17;

vi parent, siz;

void make(int x)
{
	parent[x] = x;
	siz[x] = 1;
}

int find(int x)
{
	if (parent[x] == x) return x;
	return parent[x] = find(parent[x]);
}

void unite(int x, int y)
{
	x = find(x); y = find(y);

	if (siz[x] < siz[y]) swap(x, y);

	parent[y] = x;
	siz[x] += siz[y];
}

int f(int x)
{
	return ((x)*(x+1))/2ll;
}

void solve()
{
	int n, q; cin >> n >> q;
	vi a(n+2);
	for (int i = 1; i <= n; i++) cin >> a[i];

	const int mx = (int)1e6 + 69420;
	parent = vi(n+10);
	siz = vi(n+10);

	vi ans(mx+1);
	vvi idx(mx+1);
 
	for (int i = 1; i <= n; i++)
	{
		idx[a[i]].pb(i);
	}		
	int res = 0;

	for (int i = 1; i <= n+9; i++) make(i);
	a[0] = INF;
	a[n+1] = INF;

	for (int el = 1; el <= mx-100; el++)
	{
		for (auto i : idx[el])
		{
			// check if we can merge 
			if (a[i+1] <= el && a[i-1] <= el)
			{
				res -= f(siz[find(i+1)]);	
				res -= f(siz[find(i-1)]);
				unite(i, i+1);
				unite(i, i-1);
				res += f(siz[find(i)]);
			}
			else if (a[i+1] <= el)
			{
				res -= f(siz[find(i+1)]);
				unite(i, i+1);
				res += f(siz[find(i)]);
			}
			else if (a[i-1] <= el)
			{
				res -= f(siz[find(i+1)]);
				unite(i, i+1);
				res += f(siz[find(i)]);
			}
			else
			{
				res++;
			}
		}
		ans[el] = res;
	}
	while (q--)
	{
		int x; cin >> x;
		cout << ans[x] << '\n';
	}
}
 
int32_t main()
{
	auto begin = std::chrono::high_resolution_clock::now();
	// FASTIO
	ios_base::sync_with_stdio(0);
	cin.tie(NULL); cout.tie(NULL);
 
 
 
	int T = 1;
	//cin >> T;
	for (int i = 1; i <= T; i++)
	{
		//cout << "Case #" << i << ": ";
		solve();
	}
	auto end = std::chrono::high_resolution_clock::now();
    auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
    cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\n"; 
}
# Verdict Execution time Memory Grader output
1 Correct 15 ms 33884 KB Output is correct
2 Correct 12 ms 33884 KB Output is correct
3 Correct 12 ms 33884 KB Output is correct
4 Correct 11 ms 33884 KB Output is correct
5 Correct 10 ms 33884 KB Output is correct
6 Incorrect 10 ms 33884 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 15 ms 33884 KB Output is correct
2 Correct 12 ms 33884 KB Output is correct
3 Correct 12 ms 33884 KB Output is correct
4 Correct 11 ms 33884 KB Output is correct
5 Correct 10 ms 33884 KB Output is correct
6 Incorrect 10 ms 33884 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 15 ms 33884 KB Output is correct
2 Correct 12 ms 33884 KB Output is correct
3 Correct 12 ms 33884 KB Output is correct
4 Correct 11 ms 33884 KB Output is correct
5 Correct 10 ms 33884 KB Output is correct
6 Incorrect 10 ms 33884 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 15 ms 33884 KB Output is correct
2 Correct 12 ms 33884 KB Output is correct
3 Correct 12 ms 33884 KB Output is correct
4 Correct 11 ms 33884 KB Output is correct
5 Correct 10 ms 33884 KB Output is correct
6 Incorrect 10 ms 33884 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 27 ms 38036 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 38 ms 40284 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 44 ms 40272 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 15 ms 33884 KB Output is correct
2 Correct 12 ms 33884 KB Output is correct
3 Correct 12 ms 33884 KB Output is correct
4 Correct 11 ms 33884 KB Output is correct
5 Correct 10 ms 33884 KB Output is correct
6 Incorrect 10 ms 33884 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 15 ms 33884 KB Output is correct
2 Correct 12 ms 33884 KB Output is correct
3 Correct 12 ms 33884 KB Output is correct
4 Correct 11 ms 33884 KB Output is correct
5 Correct 10 ms 33884 KB Output is correct
6 Incorrect 10 ms 33884 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 15 ms 33884 KB Output is correct
2 Correct 12 ms 33884 KB Output is correct
3 Correct 12 ms 33884 KB Output is correct
4 Correct 11 ms 33884 KB Output is correct
5 Correct 10 ms 33884 KB Output is correct
6 Incorrect 10 ms 33884 KB Output isn't correct
7 Halted 0 ms 0 KB -