记录编号 335508 评测结果 AAAAAAAAAA
题目名称 [NOIP 2015PJ]求和 最终得分 100
用户昵称 GravatarNewBee 是否通过 通过
代码语言 C++ 运行时间 0.895 s
提交时间 2016-11-02 13:50:12 内存使用 6.01 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Cu fclose(stdin);fclose(stdout);return 0;
#define Begin freopen("2015sum.in","r",stdin);freopen("2015sum.out","w",stdout);chul();Cu;
using namespace std;
//南有乔木,不可休思。 
const int maxn=100010;
typedef long long ll;
ll p=10007;
int tim,head[maxn],rlen[maxn],rehead[maxn];
ll ans=0,totx[maxn],mult[maxn],totnx[maxn],totn[maxn],nx[maxn];
struct op{
	int to,next;
}r[maxn];
void mem(){
	tim=ans=0;
	memset(head,0,sizeof(head));
	memset(totx,0,sizeof(totx));
	memset(mult,0,sizeof(mult));
	memset(totnx,0,sizeof(totnx));
	memset(totn,0,sizeof(totn));
	memset(nx,0,sizeof(nx));
	memset(rlen,0,sizeof(rlen));
}
void insert(int fr,int to){
	tim++;
	r[tim].to=to;
	r[tim].next=head[fr];
	head[fr]=tim;
}
void reinsert(int fr,int to){
	tim++;
	r[tim].to=to;
	r[tim].next=rehead[fr];
	rehead[fr]=tim;
}
void chul(){
	mem();
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%lld",&nx[i]);
		nx[i]%=p;
	}
	int x;
	for(int i=1;i<=n;i++){
		scanf("%d",&x);
		if(i%2){
			rlen[i]=head[x];
			insert(x,i);
		}
		else{
			rlen[i]=rehead[x];
			reinsert(x,i);
		}
	}
	int lst;
	for(int i=1;i<=n;i++){
		lst=rlen[i];
		lst=r[lst].to;
		ans+=mult[lst];
		ans+=totx[lst]*nx[i];
		ans+=totnx[lst]*(i%p);
		ans+=totn[lst]*(i%p)*(nx[i]);
		ans%=p;
		mult[i]=((mult[lst]+((i%p)*nx[i]))%p);
		totx[i]=(totx[lst]+(i%p))%p;
		totnx[i]=(totnx[lst]+nx[i])%p;
		totn[i]=totn[lst]+1;
	}
	printf("%lld\n",ans%p);
}
int main(){
	Begin;
}