RT,个人打了一个暴力,结果WA#2。
求大佬帮忙看看暴力哪里出问题了。
///*****Sellaris*****///
#pragma once
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
//#include <bits/extc++.h>
#define int long long
using namespace std;
//using namespace __gnu_pbds;
const int maxn=3e4+1;
inline int read(){
int ret=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){ret=ret*10+ch-'0';ch=getchar();}
return ret*f; //x=(x<<1)+(x<<3)+(ch^48);
}
int n,m,q;
int a[maxn];
int id[maxn];
int f[maxn];
int reg[maxn];
inline void query(int l,int r){
register int p=0;
register int ans=0;
for(int i=1;i<=n;i++) {
if(id[i]>=l && id[i]<=r && a[id[i]]!=reg[p]) {
reg[++p]=a[id[i]];
reg[p]*=f[p];
ans+=reg[p]%m;
ans%=m;
}
}
std::cout<<ans<<"\n";
}
inline bool cmp(int x,int y){
return a[x]<a[y];
}
signed main(){
//std::ios::sync_with_stdio(false);std::cin.tie(NULL);std::cout.tie(NULL);
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
n=read();m=read();
for(int i=1;i<=n;i++) a[i]=read(),id[i]=i;
sort(id+1,id+1+n,cmp);
f[1]=f[2]=1;reg[0]=-1;
for(int i=3;i<=maxn;i++) f[i]=(f[i-1]+f[i-2])%m;
q=read();
while(q--){
int l=read(),r=read();
query(l,r);
}
return 0;
}