2019 牛客暑期多校训练营(第一场)

题目链接:A  Equivalent Prefixes

解题思路

  单调栈

  我们可以利用单调栈对输入的两个数组进行一下操作:找到比当前数字小的元素,将找到的元素的下标储存起来;

  比较两个数组,如果有不一样的,则记录答案,break;

代码如下

 1 #include<iostream>
 2 using namespace std;
 3 const int N = 100000 + 10;
 4 struct node{
 5     int inx, val;
 6 }st[N];
 7 int n;
 8 int a[N], b[N], r1[N], r2[N];
 9 void change(int* temp, int* ans){
10     int top = 0;
11     st[0] = {0, 0};
12     for(int i = 1; i <= n; i++){
13         while(top && st[top].val >= temp[i])    --top;
14         ans[i] = st[top].inx;
15         st[++top] = node{i, temp[i]};
16     }
17 }
18 int main(){
19     while(~scanf("%d", &n)){
20         int ans = n;
21         for(int i = 1; i <= n; i++)    scanf("%d", &a[i]);
22         for(int i = 1; i <= n; i++)    scanf("%d", &b[i]);
23         change(a, r1);    change(b, r2);
24         for(int i = 1; i <= n; i++){
25             if(r1[i] != r2[i]){
26                 ans = i - 1;
27                 break;
28             }
29         }
30         printf("%d
", ans);
31     }
32     return 0;
33 }
Equivalent Prefixes

参考

2019牛客多校第一场补题笔记

原文地址:https://www.cnblogs.com/zoom1109/p/11216085.html