思路 插入屏障就是将一个区间分割成两个区间[1,x]和[x+1,n],所以我们可以利用栈来求出前缀的对数和、后缀的对数和,然后在一个for循环来寻找最大值,减少的最大防守力就是[1,n] - [1,x] - [x+1,n],最优的屏障放置位置就是当前的x+1。 代码 #include <bits/stdc++.h> using namespace std; typedef long long int ll; const int maxn = 5e4 + 10; int n,t,x,ans,flag,num,a[maxn],v1[maxn],v2[maxn]; stack...