用map存相同颜色的格子
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/hash_policy.hpp>
#include <bits/stdc++.h>
#define int long long
#pragma GCC optimize(1000)
using namespace std;
using namespace __gnu_pbds;
const int MOD=10007;
struct House
{
int color,num,id;
} a[100100];
gp_hash_table<int,int> c;
gp_hash_table<int,int>::iterator it;
int n,m;
bool cmp(House a,House b)
{
if (a.color==b.color)
return a.id<b.id;
return a.color<b.color;
}
signed main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
for (register int i=1;i<=n;i++)
{
cin >> a[i].num;
a[i].id=i;
}
for (register int i=1;i<=n;i++)
{
cin >> a[i].color;
c[a[i].color]++;
}
sort(a+1,a+n+1,cmp);
int cur=1,ans=0;
for (it=c.begin();it!=c.end();it++)
{
cur=cur+it->second;
if (it->second>=2)
for (register int xx=cur-it->second;xx<=cur-2;xx++)
for (register int zz=xx+1;zz<=cur-1;zz++)
if (a[xx].id%2==a[zz].id%2)
{
int x=a[xx].id,z=a[zz].id,y=(x+z)/2;
if (x<y&&y<z)
{
ans+=(x+z)*(a[xx].num+a[zz].num);
ans%=MOD;
}
}
}
cout << ans << endl;
return 0;
}