제출 #1341018

#제출 시각아이디문제언어결과실행 시간메모리
1341018jumpPilot (NOI19_pilot)C++20
14 / 100
69 ms10524 KiB
#include <bits/stdc++.h>
#define int long long

int n,q;
int h[1000100];
int y[1000100];
int lefth[1000100];
int righth[1000100];
int ans[1000100];
int ansV[1000100];
std::vector<std::pair<int,int>> idx;
std::stack<std::pair<int,int>> stk;
signed main() {
	std::cin >> n >> q;
	idx.push_back({0,0});
	for(int i=1;i<=n;i++){
		std::cin >> h[i];
		idx.push_back({h[i],i});
	}
	std::sort(idx.begin(),idx.end());
	stk.push({0,1e9});
	for(int i=1;i<=n;i++){
		while(!stk.empty()&&stk.top().second<=h[i]){
			stk.pop();
		}
		if(stk.empty())lefth[i]=0;
		else lefth[i]=stk.top().first;
		stk.push({i,h[i]});
	}
	while(!stk.empty())stk.pop();
	stk.push({n+1,1e9});
	for(int i=n;i>=1;i--){
		while(!stk.empty()&&stk.top().second<h[i]){
			stk.pop();
		}
		if(stk.empty())righth[i]=n+1;
		else righth[i]=stk.top().first;
		stk.push({i,h[i]});
	}
	// for(int i=1;i<=n;i++){
	// 	std::cout << lefth[i] << ' ' << righth[i] << '\n';
	// }
	//std::cout << "___\n";
	ans[0]=0;
	for(int i=1;i<idx.size();i++){
		int idxv = idx[i].second;
		ans[i]=ans[i-1]+std::max((int)1,(idxv-lefth[idxv])*(righth[idxv]-idxv));
	}
	// for(int i=1;i<idx.size();i++){
	// 	std::cout << idx[i].first << ' ' << ans[i] << '\n';
	// }
	std::vector<std::pair<int,int>> searchV;
	for(int j=1;j<=q;j++){
		std::cin >> y[j];
		searchV.push_back({y[j],j});
	}
	std::sort(searchV.begin(),searchV.end());
	int idx1 = 1;
	
	for(int i=0;i<searchV.size();i++){
		while(idx1!=idx.size()-1&&(idx[idx1].first==idx[idx1+1].first||searchV[i].first>idx[idx1].first)){
			idx1++;
		}
		//std::cout << i << '-' << idx1 << '\n';
		ansV[searchV[i].second]=ans[idx1];
	}
	for(int i=1;i<=q;i++)std::cout << ansV[i] << '\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...