题目:http://acm.hdu.edu.cn/showproblem.php?pid=6319
分析:
单调deque;
STL:TLE!!
代码:
#include <bits/stdc++.h>
#define Pii pair<ll,int>
#define read() strtol(ipos,&ipos,10)
using namespace std;
const int ffmax=40000008;
char Input[ffmax],*ipos;
typedef long long ll;
const int tmax=1e7+5;
int n,m,k;
ll p,q,r,mod,a[tmax],A,B;
Pii Q[tmax];
int front,back;
int main()
{
int T,i;
fread(Input,1,ffmax,stdin);
ipos=Input;
T=read();
while(T--)
{
A=B=0;
front=back=1;
n=read();
m=read();
k=read();
p=read();
q=read();
r=read();
mod=read();
for(i=1;i<=k;i++)
a[i]=read();
for(i=k+1;i<=n;i++)
a[i]=(p*a[i-1]%mod+q*i%mod+r)%mod;
for(i=n;i>=1;i--)
{
while(front!=back&&Q[back-1].first<=a[i]) back--;
while(front!=back&&Q[front].second>=i+m) front++;
Q[back++]=Pii(a[i],i);
if(i>n-m+1) continue;
A+=Q[front].first xor (1ll*i);
B+=(back-front) xor i;
}
printf("%I64d %I64d\n",A,B);
}
return 0;
}