#include <iostream>
using namespace std;
int main() {
int T,*x,i,j,k,a,res,pres;
long Q,N,p,q;
cin>>T;
for(k=0;k<T;k++)
{
cin>>N>>Q;
x=new int[N];
for(i=0;i<N;i++)
{
cin>>x[i];
}
for(i=0;i<Q;i++)
{
pres=-999;
cin>>a>>p>>q;
for(j=p-1;j<q;j++)
{
res=a xor x[j];
if(pres<res)
{
pres=res;
}
}
cout<<pres<<endl;
}
delete [] x;
}
return 0;
}
我得到的時間超出限制的更大的問題(這意味着問題可以被優化)(N = 100000)(N ,Q,T超出)。我想我需要使用某種預處理來優化算法。我的解決方案是針對整個問題的O(NQT)。該問題需要針對查詢中給定限制的所有可能XOR進行評估。所以,該問題需要去(q-p)[可以在最大N]次查詢。我無法想出一個辦法來避免這種情況。一個命中或方向將非常感激。我正在考慮以某種方式實現一個堆,以便它從堆中扣除查詢a,並註冊一個最大堆以查看最大差異和數據庫xors。但是,這也將採取O(NQT)
爲什麼你的循環從1開始?爲什麼你不分配分配?爲什麼你要遠離使用點聲明變量?你爲什麼使用名字空間std;'?首先清理代碼,並獲得巨大的不變因素。 – Yakk
清理Itsy Bitsy的東西。我的主要代碼全部清理完畢。在我清理不必要的東西之前,這已經是相當原始的了。從1開始,因爲最初並沒有得到結果,只是爲了確保1到N的所有東西,所以dat按照我認爲的算法進行。 –
可能更適合codereview.stackexchange.com –