Pagini recente » Cod sursa (job #2536600) | Cod sursa (job #2158821) | Cod sursa (job #217786) | Cod sursa (job #214954) | Cod sursa (job #2092670)
#include<bits/stdc++.h>
using namespace std;
ifstream f("tricouri.in");
ofstream g("tricouri.out");
int n,v[300002],m;
int sum[21][6][21],Ly,R,arr[21];
inline void prec()
{
for(int Qt=2;Qt<=20;++Qt){
for(int j=1;j<=n;++j){
for(int k=0;k<Qt;++k)
arr[k]=(k+v[j])%Qt;
for(int p=4;p>=1;--p)
for(int k=0;k<Qt;++k)
if(sum[Qt][p][k])
sum[Qt][p+1][arr[k]]=max(sum[Qt][p+1][arr[k]],sum[Qt][p][k]+v[j]);
int Rose=v[j]%Qt;
sum[Qt][1][Rose]=max(sum[Qt][1][Rose],v[j]);
}
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i)
f>>v[i];
prec();
for(int i=1;i<=m;++i)
{
f>>Ly>>R; /// I used to
if(!sum[R][Ly][0])
g<<-1<<'\n';
else
g<<sum[R][Ly][0]<<'\n'; ///g<<"Rose"<<'\n';
}
return 0;
}