В связи с проблемной задачей здесь: LinkОптимизация Стандартных итерационного алгоритма
#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 maxing out). Я полагаю, что мне нужно оптимизировать алгоритм, используя некоторую предварительную обработку. Мое решение - O (NQT) для всей проблемы. Проблема должна будет оценивать для всех возможных XOR для заданных лимитов в запросе. Итак, проблема должна будет идти (q-p) [Может быть в max N] раз для запроса. Я не могу понять, как избежать этого. Хит или направление было бы действительно оценено. Я думаю о реализации кучи как-то, так что он вычитает запрос a из кучи, и den делает максимальную кучу, чтобы увидеть максимальную разницу и den xors. Но это тоже будет принимать O (NQT)
Почему ваши петли начинаются с 1? Почему вы выделяете без освобождения? Почему вы объявляете переменные далеко от точки использования? Почему вы «используете пространство имен std;»? Сначала очистите код и получите огромные постоянные факторы. – Yakk
Очистить Itsy Bitsy Вещи. Мой основной код очищается. Это было немного сырым, прежде чем я очистил ненужные вещи. Начинал с 1, потому что изначально не получал результата, просто чтобы убедиться, что все от 1 до N, так что это идет согласно algo, о котором я думал. –
Вероятно, лучше подходит для codereview.stackexchange.com –