洛谷【数据结构1-1】线性表

目录

  • P4387 【深基15.习9】验证栈序列
  • P2234 [HNOI2002]营业额统计

P4387 【深基15.习9】验证栈序列

#include
using namespace std;
const int maxn = 100010;

int main(){
	int q;//询问次数
	scanf("%d",&q);
	int n;//序列长度 
	while(q--){
		scanf("%d",&n);
		int pushed[maxn],poped[maxn];
		for(int i =0;i<n;i++){
			scanf("%d",&pushed[i]);
		}
		for(int i =0;i<n;i++){
			scanf("%d",&poped[i]);
		}
		stack<int> q;//栈
		int index =0;
		for(int i=0;i<n;i++){
			q.push(pushed[i]);
			while(q.top() == poped[index]){//栈顶和序列第一位一样,则出栈 
				q.pop();
				index++;
				if(q.empty()) break;//注意!当栈空时不能top() 
			}
		} 
		if(q.empty()) printf("Yes\n");
		else printf("No\n"); 
	} 
	return 0;
}

P2234 [HNOI2002]营业额统计

#include
using namespace std;
//const int maxn = 32770;

set<int> s;
set<int>::iterator k,a;
int n,x,ans=0;
int main(){
	s.insert(0x3fffff);
	s.insert(-0x3fffff);
	scanf("%d",&n);
	for(int i =1;i<=n;++i){
		scanf("%d",&x);
		if(s.size()==2){
			ans+=x;
			s.insert(x);
		}else{
			k = s.lower_bound(x);
			if(*k != x){
				a =k;
				a--;//二分,迭代器a和k之间为x填入的位置 
				ans+=min(abs(*a-x),abs(*k-x));
				s.insert(x);
			}
		}
	}
	printf("%d\n",ans);
	return 0; 
}

你可能感兴趣的:(刷题)