QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#22581#2849. 弗雷兹的玩具商店lindongli2004#RE 3ms11772kbC++142.5kb2022-03-09 22:02:352022-04-30 01:24:13

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-04-30 01:24:13]
  • 评测
  • 测评结果:RE
  • 用时:3ms
  • 内存:11772kb
  • [2022-03-09 22:02:35]
  • 提交

answer

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
#define int long long
const int M=63,N=2002021;
typedef pair<int,int> PII;
int n,m,blo;
int bl[N],val[N],c[N],tagw[N],tagc[N],f[N],q[N/200][M],_q[M];
bool cmp(const PII &x,const PII &y){return x>y;};
void remake(int x){
	int L=(x-1)*blo+1,R=min(n,x*blo),top=0;
	for(int i=1;i<=m;i++)q[x][i]=-2e9;
	for(int i=L;i<=R;i++){
		val[i]+=tagw[x],c[i]=(c[i]-1+tagc[x])%m+1;
		q[x][c[i]]=max(q[x][c[i]],val[i]);
	}
}
void changec(int l,int r,int ad){
	for(int i=l;i<=min(r,bl[l]*blo);i++)
		c[i]=(c[i]-1+ad)%m+1;
	remake(bl[l]);
	if(bl[l]!=bl[r]){
		for(int i=(bl[r]-1)*blo+1;i<=r;i++)
			c[i]=(c[i]-1+ad)%m+1;
		remake(bl[r]);
	}
	for(int i=bl[l]+1;i<bl[r];i++)
		tagc[i]+=ad;
}
void changew(int l,int r,int ad){
	for(int i=l;i<=min(r,bl[l]*blo);i++)val[i]+=ad;
	remake(bl[l]);
	if(bl[l]!=bl[r]){
		for(int i=(bl[r]-1)*blo+1;i<=r;i++)val[i]+=ad;
		remake(bl[r]);
	}
	for(int i=bl[l]+1;i<bl[r];i++)
		tagc[i]+=ad;
}
void print(int x){
	if(x>9)print(x/10);
	putchar(x%10+'0');
}
void push(int x,int c){
	_q[c]=max(_q[c],x);
}
void solve(int l,int r){
	for(int i=1;i<=m;i++)_q[i]=-2e9;
	for(int i=l;i<=min(r,bl[l]*blo);i++)
		push(val[i]+tagw[bl[l]],(c[i]+tagc[bl[l]]-1)%m+1);
	if(bl[l]!=bl[r]){
		for(int i=(bl[r]-1)*blo+1;i<=r;i++)
			push(val[i]+tagw[bl[r]],(c[i]+tagc[bl[r]]-1)%m+1);
	}
	for(int i=bl[l]+1;i<bl[r];i++){
		int ad=tagc[i];
		for(int j=1;j<=m;j++)
			push(q[i][j],(j+ad-1)%m+1);
	}
	for(int i=0;i<=m;i++)f[i]=0;
	for(int i=1;i<=m;i++){
		for(int j=i;j<=m;j++)
			f[j]=max(f[j],f[j-i]+_q[i]);
	}
	int ans1=0,ans2=0;
	for(int i=1;i<=m;i++){
//		cout<<"f["<<i<<"]="<<f[i]<<endl;
		ans1+=f[i],ans2^=f[i];
	}
	print(ans1); putchar(' ');
	print(ans2); putchar('\n');
}
int read(){
	int x=0,f=1; char ch=getchar();
	while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
#undef int
int main()
{
	#define int long long
	n=read(); m=read(); blo=2000;
	for(int i=1;i<=n;i++)c[i]=read();
	for(int i=1;i<=n;i++)val[i]=read();
	for(int i=1;i<=n;i++)bl[i]=(i-1)/blo+1;
	for(int i=1;i<=bl[n];i++)remake(i);
	int aq=read();
	while(aq--){
		int op=read(),l=read(),r=read();
		if(op==1)changec(l,r,read());
		if(op==2)changew(l,r,read());
		if(op==3)solve(l,r);
	}
	return 0;
}
/*
4 10
1 6 10 2
100 2333 666 300
7
3 1 4
3 1 3
1 2 4 1
3 1 4
2 2 3 -1000
2 2 3 -600
3 2 4

*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 11772kb

input:

4 10
1 6 10 2
100 2333 666 300
7
3 1 4
3 1 3
1 2 4 1
3 1 4
2 2 3 -1000
2 2 3 -600
3 2 4

output:

15165 2865
14165 2169
36630 798
4899 1273

result:

ok 4 lines

Test #2:

score: -100
Runtime Error

input:

200000 60
21 16 58 5 26 44 30 40 31 27 50 21 59 50 37 39 26 9 15 14 9 59 40 29 32 5 2 25 57 18 4 9 25 1 13 42 36 34 21 6 53 2 18 51 51 55 29 17 3 36 22 11 26 1 40 58 57 33 22 53 42 26 1 6 18 6 47 54 31 59 51 23 60 1 13 43 55 34 59 49 9 12 51 34 4 22 31 1 47 45 45 28 10 38 34 19 35 12 4 5 11 47 28 2 ...

output:


result: