2019牛客暑期多校训练营(第一场)
J Fraction Comparision 签到题 __int128
A Equivalent Prefixes 单调栈
B Integration 数学题,微积分
C Euclidean Distance 前缀和
F Random Point in Triangle概率+几何
A Equivalent Prefixes
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int a[maxn],b[maxn];
int dp1[maxn],dp2[maxn];
int main()
{
int n;
while(scanf("%d",&n) != EOF) {
for(int i = 1; i <= n; ++i) scanf("%d",&a[i]);
for(int i = 1; i <= n; ++i) scanf("%d",&b[i]);
// for(int i = 1; i <= n; ++i) printf("%d ",a[i]);
// for(int i = 1; i <= n; ++i) printf("%d ",b[i]);
// cout << endl;
dp1[1] = a[1],dp2[1] = b[1];
int len1 = 1,len2 = 1;
for(int i=2;i<=n;i++){
if(a[i] >= dp1[len1]){
dp1[++len1]=a[i];
}
else{
int j=upper_bound(dp1+1,dp1+len1+1,a[i])-dp1;
// dp1[j]=a[i];
// if(a[i] < mmin1){
// mmin1 = a[i];
// len1 = 1;
// dp1[len1] = a[i];
// }
len1 = j;
dp1[len1] = a[i];
}
if(b[i] >= dp2[len2]){
dp2[++len2]=b[i];
}
else{
int j=upper_bound(dp2+1,dp2+len2+1,b[i])-dp2;
// dp2[j]=b[i];
// if(b[i] < mmin2){
// mmin2 = b[i];
// len2 = 1;
// dp2[len2] = b[i];
// }
len2 = j;
dp2[len2] = b[i];
}
// cout << len1 << "?" << len2 << " ";
if(len1 != len2){
printf("%d\n",i - 1);
break;
}
}