#4306. 贪玩蓝月

题目描述

《贪玩蓝月》是目前最火爆的网页游戏。在游戏中每个角色都有若干装备,每件装备有一个特征值 $w$ 和一个战斗力 $v$ 。在每种特定的情况下,你都要选出特征值的和对 $p$ 取模后在一段范围内的装备,而角色死亡时自己的装备会爆掉。每个角色的物品槽可以看成一个双端队列,得到的装备会被放在两端,自己的装备爆掉也会在两端被爆。

现在我们有若干种事件和询问,如下所示:

- `IF w v`:在前端加入一件特征值为 $w$ 战斗力为 $v$ 的装备
- `IG w v`:在后端加入一件特征值为 $w$ 战斗力为 $v$ 的装备
- `DF`:删除最前端的装备
- `DG`:删除最后端的装备
- `QU l r`:在当前的装备中选取若干装备,他们的和对 $p$ 取模后在 $[l, r]$ 中,使得这些装备的战斗力之和最大

为了锻炼你的水平,请尽量使用在线做法。

题解

考虑只加不删的话,那就是普通的 $\text{dp}$ ,即 $f[i][j]$ 表示前 $i$ 个物品,特征值的和模 $p$ 为 $j$ 的最大战斗力和,然后背包转移即可

考虑有删数的话,就上线段树分治即可,于是就又是只有加数的了,效率: $O(mplogm)$

好像有种在线的做法but我不会

代码

#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=2e5+5;
int m,P,b[N],U[N],V[N],G[N];
LL f[30][500],F[500];
struct O{int x,y;}a[N];
vector<O>g[N];char ch[9];
#define Ls k<<1
#define Rs k<<1|1
#define mid ((l+r)>>1)
void upd(int k,int l,int r,int L,int R,O v){
    if (L<=l && r<=R){
        g[k].push_back(v);return;
    }
    if (mid>=L) upd(Ls,l,mid,L,R,v);
    if (mid<R) upd(Rs,mid+1,r,L,R,v);
}
void qry(int k,int l,int r,int d){
    int z=g[k].size();
    for (int x,y,i=0;i<z;i++){
        x=g[k][i].x,y=g[k][i].y;
        for (int j=0;j<P;j++)
            F[(j+x)%P]=f[d][j]+y;
        for (int j=0;j<P;j++)
            f[d][j]=max(f[d][j],F[j]);
    }
    if (l==r){
        if (G[l]){
            LL v=-1;
            for (int i=U[l];i<=V[l];i++)
                v=max(v,f[d][i]);
            printf("%lld\n",v);
        }
        return;
    }
    else{
        for (int i=0;i<P;i++)
            f[d+1][i]=f[d][i];
        qry(Ls,l,mid,d+1);
        for (int i=0;i<P;i++)
            f[d+1][i]=f[d][i];
        qry(Rs,mid+1,r,d+1);
    }
}
int main(){
    cin>>m;cin>>m>>P;
    int l=m+1,r=m;
    for (int i=1;i<=m;i++){
        scanf("%s",ch);
        if (ch[0]==‘I‘){
            if (ch[1]==‘F‘) b[--l]=i,
                scanf("%d%d",&a[l].x,&a[l].y);
            else b[++r]=i,
                scanf("%d%d",&a[r].x,&a[r].y);
        }
        else if (ch[0]==‘Q‘)
            G[i]=1,scanf("%d%d",&U[i],&V[i]);
        else{
            if (ch[1]==‘F‘) upd(1,1,m,b[l],i,a[l]),l++;
            else upd(1,1,m,b[r],i,a[r]),r--;
        }
    }
    for (int i=l;i<=r;i++) upd(1,1,m,b[i],m,a[i]);
    for (int i=1;i<P;i++) f[0][i]=-2e18;
    qry(1,1,m,0);return 0;
}

原文地址:https://www.cnblogs.com/xjqxjq/p/12309679.html

时间: 2024-11-05 04:15:28

#4306. 贪玩蓝月的相关文章

【蓝月集金】行情分析

[蓝月集金]行情分析 美国COMEX 8月黄金期货价格周三(7月20日)收盘下跌17.00美元,跌幅1.28%,报1315.30美元/盎司,金价跌至三周来最低水平,因多数企业财报向好支撑美股道指创历史新高:同时,美元触及四个月来最高水平,此前美国发布强劲经济数据,增加了美联储今年底前加息的预期. 周三(7月20日),欧洲交易时段,因英国至5月三个月ILO失业率降至2005年以来最低水平,英镑获得一定支撑,短线上涨,并升至日内高位.近期美国经济数据表现向好,市场风险稳固,美联储年内加息预期再次升温

10月第3周业务风控关注|网络安全威胁信息格式规范正式发布

易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 1 网络安全威胁信息格式规范正式发布,国内威胁情报发展迎来新阶段2018 年 10 月 10 日,我国正式发布威胁情报的国家标准--<信息安全技术网络安全威胁信息格式规范Information security technology - Cyber security threat information format>(GB/T

15软工 15100340

完成教材第一章P18第4题Games:贪玩蓝月    Moblie Apps:王者荣耀  操作系统:安卓系统 一:Games:贪玩蓝月 1.通过他的游戏内容使我成为它的用户.他们的目标是盈利.他们并不全是向用户赚取现金(通过向用户出售英雄,皮肤来获得收益),还有向一些企业(比赛时的所收到的一些广告费). 2.这是通过官网下载的.我当时上大一.我感觉这个游戏能在空闲的时光给我带来欢乐. 3.通过给游戏打补丁.通过游戏内进行更新. 4.通过一些不定期的活动,以及一些礼包等. 二: Moblie Ap

20154307《网络对抗》Exp3 免杀原理与实践

20154307<网络对抗>Exp3 免杀原理与实践 一.基础问题回答 (1)杀软是如何检测出恶意代码的? 基于特征码的检测:杀毒软件检测到有程序包含的特征码与其特征码库的代码相匹配,就会把该程序当作恶意软件. 启发式恶意软件检测 基于行为的恶意软件检测:检测程序是否会有一些恶意行为,如修改注册表,更改权限等等.. (2)免杀是做什么? 让攻击程序不被杀软查杀 (3)免杀的基本方法有哪些? 加壳 改变特征码 二.实践内容 1.使用msf生成后门程序的检测 由于上一个实验我们已经用msf生成了一

20154327 Exp4 恶意代码分析

实验内容 使用Windows计划任务schtasks监控系统运行 使用指令 schtasks /create /TN 20154327netstat /sc MINUTE /MO 5 /TR "cmd /c netstat -bn > c:\netstatlog.txt 创建计划任务netstat 指令解释: TN:Task Name,本例中是netstat SC: SChedule type,本例中是MINUTE,以分钟来计时 MO: MOdifier TR: Task Run,要运行的

江西财经大学第一届程序设计竞赛

A:贪玩蓝月 题目描述 "挤需体验五番钟,里造会挨上这款游戏!" 怎么可能嘛!当我是傻子吗!#?%!""@-- 于是我就去玩了,然后我果然成功证明,我是正确的,这破游戏,真的很无聊. 有多无聊呢,和这道题一样. ------------------------------------ 问题有两种情况 0 给出两个100以内的正整数做加法 1 给出一个字符串问有多少个字符(字符串长度不超过100000) 输入描述: 第一行输入一个整数T(表示样例个数)接下来T组样例每

Python爬取电影天堂指定电视剧或者电影

1.分析搜索请求 一位高人曾经说过,想爬取数据,要先分析网站 今天我们爬取电影天堂,有好看的美剧我在上面都能找到,算是很全了. 这个网站的广告出奇的多,用过都知道,点一下搜索就会弹出个窗口,伴随着滑稽的音乐,贪玩蓝月? 通过python,我们可以避免广告,直接拿到我们要的东西 我用的是火狐浏览器,按F12打开开发者工具,选择网络 按照正常的操作顺序,其实python就是在模拟人进行一些网页操作,我们只不过通过python解放自己的双手 在搜索框输入“傲骨贤妻”,当然你输入其他的电视剧名称也可以,

7-2 幼儿园数学题(29 分)

我系渣渣辉,我在梦工厂等你,是兄弟就来砍我啊!! 刚上幼儿园的渣渣辉迷上了一款名叫贪玩蓝月的新游戏,由于过于沉迷游戏,上课听讲的效率直线下降. 今天,他的数学老师给他布置了一道求解二元一次方程组的题目,贪玩的他只记下的方程组的一个等式 ax+by=c,他知道一个二元方程是无法求出正确答案的,于是决定在满足此方程且x,y均为非负整数的前提下, 随机选一组x,y作为最后的答案,请聪明的你帮渣渣辉小朋友找出所有的满足条件的x,y组合个数. 输入格式: 输入只有一行,一行3个数字a,b,c(1<=a,b

Spring的学习_______4.各种参数类型的依耐注入(DI)测试以及P命名空间的注入和C命名空间的注入

(本案例为:Idea下的maven项目) 1.实体类的编写: Student.java public class Student { private String name; private Address address; private String[] books; private List<String> hobbys; private Map<String,String> cards; private Set<String> games; private St