两个长度为n的序列a,b。问有多少个区间[l,r]满足max(a[l,r])<min(b[l,r])即a区间的最大值小于b区间的最小值数据范围:n<1e5,a(i),b(i)<1e9
输入描述:
第一行一个整数n
第二行n个数,第i个为a(i)
第三行n个数,第i个为b(i)
0<1<=r<n
输出描述:
一行一个整数,表示答案
例1:输入
3
3 2 1
3 3 3
输出: 3
答案:
int n; cin >> n;
vector<int> a, b;
for (int i=0;i<n;++i)
{
int t; cin >> t;
a.push_back(t);
}
for (int i=0;i<n;++i)
{
int t; cin >> t;
b.push_back(t);
}
vector<vector<int> > dp_max(n, vector<int>(n,0));
vector<vector<int> > dp_min(n, vector<int>(n,0));
for (int i=0;i<n;++i)
{
dp_max[i][i] = a[i];
dp_min[i][i] = b[i];
for (int j=i+1;j<n;++j)
{
dp_max[i][j] = max(dp_max[i][j-1], a[j]);
dp_min[i][j] = min(dp_min[i][j-1], b[j]);
}
}
// count
int count = 0;
for (int i=0;i<n;++i)
for (int j=i;j<n;++j)
if (dp_max[i][j] < dp_min[i][j])
count++;
cout << count;