Subtask1的点TLE,求调。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans;
struct node{
int id,color,number;
}a[100001];
int f(int x,int y){
return (a[x].id+a[y].id)*(a[x].number+a[y].number);
}
bool cmp(node x,node y){
return ((x.id%2==y.id%2) and x.color==y.color and x.id<y.id) or ((x.id%2==y.id%2) and x.color<y.color) or x.id%2<y.id%2;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i].number,a[i].id=i;
for(int i=1;i<=n;i++)cin>>a[i].color;
sort(a+1,a+1+n,cmp);
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(a[i].color!=a[j].color)break;
if((a[i].id+a[j].id)%1==1)break;
ans=ans+f(i,j);
ans%=10007;
}
}
cout<<ans%10007;
return 0;
}