Equivalent Prefixes
题意:给你两个数组a,b,大小为n,让你寻找一个数p (1<= p <= n) ,使之在 1~p 任意一个区间中a,b数组的最小值下标相同。
思路:看到用线段树去写的我也是服了。。。我的思路是这样的,先去更新最小值,如果更新情况不一样肯定结束,然后看前面是否都一致单调递减。
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> #include<map> #include<string> #define ll long long using namespace std; int a[100010]; int b[100010]; int main() { int n; while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]); int m1=99999999; int m2=99999999; int r=0; int flag=0; for(int i=1;i<=n;i++) { for(int j=i-1;j>0;j--) { if((a[i]<a[j]&&b[i]>b[j])||(a[i]>a[j]&&b[i]<b[j])) { flag = 1; break; } else if(a[j]<a[i]&&b[j]<b[i]) { break; } } if(flag) { r=i-1; break; } } if(r==0) r=n; printf("%d\n",r); } }