Submission #965480

#TimeUsernameProblemLanguageResultExecution timeMemory
965480red24Pilot (NOI19_pilot)C++14
23 / 100
48 ms40272 KiB
#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 (x == y) return;
 
	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])
		{
			if (siz[find(i)] == 1) res++;
			if (a[i+1] <= el)
			{
				res -= f(siz[find(i+1)]);
				res -= f(siz[find(i)]);
				unite(i, i+1);
				res += f(siz[find(i)]);
			}
			if (a[i-1] <= el)
			{
				res -= f(siz[find(i-1)]);
				res -= f(siz[find(i)]);
				unite(i, i-1);
				res += f(siz[find(i)]);
			}
		}
		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 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...