現在有n個數\(a_1,a_2,a_3,...,a_n\) 。你最多可以進行k次操作,每次操作你可以將其中乙個數乘以\(x\),使得\(a_1|a_2|...|a_n\) 最大。
貪心+字首字尾
首先明確:答案的這\(k\)次\(\times x\)操作用都會在同乙個數身上。因為\(x\)大於\(2\),所以每次相乘都會使得該數的二進位制為至少左移一位,或起來以後必然會使答案更優。
如何快速求出每乙個數操作之後的答案?
利用字首字尾思想,維護字首或與字尾或,這樣就可以在列舉出修改的數以後\(o(1)\)求出答案了。
#include #include #define ll long long
using namespace std;
const int maxn = 2e5 + 10;
int n,a[maxn],k,x;
ll pre[maxn],bac[maxn],ans;
int main()
printf("%lld\n", ans);
return 0;
}