https://www.nowcoder.com/acm/contest/134/A
难点就在排序后,倒序枚举时不好处理,因为如果不拿走木棒时,可以直接模拟a[i]+a[i+1]>a[i+2],满足即为三角形。但因为拿走木棒因此不好模拟,因此引入sum,和计数的cnt
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef vector<ll> vll;
const int MAXN = 1e6 + 10;
const ll INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;
const double eps = 1e-8;
int n, m, k;
typedef struct Node{
int v, id;
bool operator < (const Node &rhs) const{
return v < rhs.v;
}
}Node;
vector<Node> p;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cout << setprecision(10) << fixed;
cin >> n >> k;
p.resize(n);
for(int i = 0; i < n; i++){
cin >> p[i].v;
p[i].id = i;
}
sort(p.begin(), p.end());
while(k--){
int ban;
cin >> ban;
ban--;
ll res = -1;
for(int i = n - 1; i >= 2; i--){
if(p[i].id == ban)
continue;
int sum = 0;
for(int j = i - 1, cnt = 0; j >= 0 && cnt < 2; j--)
if(p[j].id == ban)
continue;
else{
cnt++;
sum += p[j].v;
}
if(sum > p[i].v){
res = (ll)sum + (ll)p[i].v;
break;
}
}
cout << res << endl;
}
cerr << "execute time : " << (double)clock() / CLOCKS_PER_SEC << endl;
return 0;
}