比赛 4043级2023省选模拟赛1 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 贪玩蓝月 最终得分 100
用户昵称 op_组撒头屯 运行时间 6.709 s
代码语言 C++ 内存使用 13.37 MiB
提交时间 2023-03-20 21:02:25
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=50000+5;
const int M=500+5;
int inf;
typedef long long ll;
int n,m;
int w[N],v[N];
struct sdf{
	int l,r;ll ans;
}q[N];
deque<int>dq;
int l[N],r[N],tot=0,tim=1;
struct segtree{
	int l,r;vector<int>s;
}tr[N<<2];
void build(int pt,int l,int r){
	tr[pt]={l,r};
	if (l==r)return ;
	int mid=(l+r)/2;
	build(pt*2,l,mid);build(pt*2+1,mid+1,r);
}
void add(int pt,int x,int y,int id){
	int l=tr[pt].l,r=tr[pt].r;
	if (x<=l&&r<=y){
		tr[pt].s.push_back(id);return ;
	}int mid=(l+r)/2;
	if (x<=mid)add(pt*2,x,y,id);
	if (mid+1<=y)add(pt*2+1,x,y,id);
}
void solve(int pt,ll *f){
	int l=tr[pt].l,r=tr[pt].r;
	ll g[2][M],now=0;
	memcpy(g[1],f,sizeof(g[1]));
	memset(g[0],-0x3f,sizeof(f));g[0][0]=0;
	for (int i=0;i<(int)tr[pt].s.size();i++){
		int p=tr[pt].s[i];
		for (int j=0;j<m;j++){
			g[now][(j+w[p])%m]=max(g[now^1][(j+w[p])%m],g[now^1][j]+v[p]);
		}
		now^=1;
	}
	if (l==r){
		q[l].ans=-1;
		for (int i=q[l].l;i<=q[l].r;i++){
			q[l].ans=max(q[l].ans,g[now^1][i]);
		}return ;
	}
	solve(pt*2,g[now^1]);solve(pt*2+1,g[now^1]);
}
int main(){
	freopen ("tanwan.in","r",stdin);
	freopen ("tanwan.out","w",stdout);
	int T;scanf("%d",&T);scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++){
		char opt[10];scanf("%s",opt);
		if (opt[0]=='I'){tot++;
			if (opt[1]=='F')dq.push_front(tot);
			else dq.push_back(tot);
			scanf("%d%d",&w[tot],&v[tot]);l[tot]=tim;
		}
		if (opt[0]=='D'){
			if (opt[1]=='F'){
				r[dq.front()]=tim;dq.pop_front();
			}
			else{
				r[dq.back()]=tim;dq.pop_back();
			}
		}
		if (opt[0]=='Q'){
			scanf("%d%d",&q[tim].l,&q[tim].r);tim++;
		}
	}tim--;
	build(1,1,tim);
	for (int i=1;i<=tot;i++){
		if (l[i]>tim)continue;
		if (!r[i])r[i]=tim+1;
		add(1,l[i],r[i]-1,i);
	}
	ll f[M];memset(f,-0x3f,sizeof(f));
	inf=f[0];f[0]=0;
	solve(1,f);
	for (int i=1;i<=tim;i++){
		printf("%lld\n",q[i].ans);
	}
}