Description

“我希望能使用更多的魔法。不对,是预定能使用啦。最终我要被大家称呼为大魔法使。为此我决定不惜一切努力。”
——《The Grimoire of Marisa》雾雨魔理沙
魔理沙一如既往地去帕秋莉的大图书馆去借魔导书(Grimoire) 来学习魔道。
最开始的时候,魔理沙只是一本一本地进行研究。然而在符卡战中,魔理沙还是战不过帕秋莉。
好在魔理沙对自己的借还和研究结果进行了记录,从而发现了那些魔导书的精妙之处。
帕秋莉的那些魔导书,每本都有一个类别编号ti 和威力大小pi。而想要获得最有威力的魔法,就必须同时研究一些魔导书。而研究的这些魔导书就必须要满足,类别编号为T 的书的本数小于等于T,并且总共的本数小于等于一个给定的数N。而研究这些魔导书之后习得的魔法的威力就是被研究的魔导书的威力之和。
为了击败帕秋莉,魔理沙想要利用自己发现的规律来获得最有威力的魔法。
她列出了计划中之后M 次的借还事件,并想要知道每个事件之后自己所能获得的魔法的最大威力。可她忙于魔法材料——蘑菇的收集,于是这个问题就交给你来解决了。

Input

输入文件grimoire.in。
第1 行2 个整数N,M,分别表示魔理沙能研究的魔导书本数的上限和她的借还事件数。
之后M 行,每行的形式为“op t p”(不含引号)。Op 为“BORROW” 或“RETURN”,分别表示借书和还书。T 为一个整数,表示这本书的类别编号。P为一个整数,表示这本书的威力大小。注意,还书时如果有多本书满足类别编号为t,威力大小为p,这表明这些书都是相同的,魔理沙会任选其中一本书还回去。如果你问我为何会有相同的书,多半因为这是魔导书吧。

Output

输出文件grimoire.out。
一共M 行,每行一个整数,即每个事件之后的最大威力。

Sample Input

5 10
BORROW 1 5811
BORROW 3 5032
RETURN 3 5032
BORROW 3 5550
BORROW 5 3486
RETURN 1 5811
RETURN 3 5550
BORROW 4 5116
BORROW 3 9563
BORROW 5 94

Sample Output

5811
10843
5811
11361
14847
9036
3486
8602
18165
18259

Data Constraint

对于5% 的数据,1 <= t,N,M <= 50。
对于10% 的数据,1 <= t,N,M <= 100。
对于30% 的数据,1 <= t,N,M<= 10 000。
另有30% 的数据,1 <= p <= 1 000。
对于100% 的数据,1 <= t,N,M <= 300 000,1<= p<= 1 000 000 000。
另外,总共有30% 的数据,满足没有“RETURN” 操作。这部分数据均匀分布。

赛时

一直考虑正解,线段树主席数splay都想了想,但是由于自己实在是太*,所以没想到分别维护小与大的数据结构,然后就0分。

正解

要求操作有插入,删除,以及求第k大(求前n大的答案),那么啥都可以搞了,最后打了权值线段树,然后动态开点就行了

#include<cstdio>
#include<iostream>
#define N 300007
using namespace std;
const long long maxn=1000000010;//最大的权值,可以考虑先离散化
int n,m,cnt,son[N*100][2],num[N*100],root[N];
long long ans,val[N*100];
int query(int rt,int l,int r,int k){if(l==r){ans+=min(k,num[rt])*l;return l;}int mid=l+r>>1;if(k<=num[son[rt][1]]) query(son[rt][1],mid+1,r,k);else{ans+=val[son[rt][1]];query(son[rt][0],l,mid,k-num[son[rt][1]]);}
}
void change(int &rt,int l,int r,int k,int bz){if(!rt) rt=++cnt;num[rt]+=bz;val[rt]+=bz*k;if(l==r) return;int mid=l+r>>1;if(k<=mid) change(son[rt][0],l,mid,k,bz);else change(son[rt][1],mid+1,r,k,bz);
}
int main(){freopen("grimoire.in","r",stdin);freopen("grimoire.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;char s[10];scanf("%s%d%d",s+1,&x,&y);if(s[1]=='B'){int t=query(root[x],0,maxn,x);change(root[x],0,maxn,y,1);if(t<y){change(root[0],0,maxn,y,1);change(root[0],0,maxn,t,-1);}}else{int t=query(root[x],0,maxn,x+1);change(root[x],0,maxn,y,-1);if(y>t){change(root[0],0,maxn,y,-1);change(root[0],0,maxn,t,1);}}ans=0;query(root[0],0,maxn,n);printf("%lld\n",ans);}
}

2020.7.25T2魔道研究(jz暑假训练day10)相关推荐

  1. 2020.7.25T1挑竹签(jz暑假训练day10)

    题目大意 挑竹签--小时候的游戏 夏夜,早苗和诹访子在月光下玩起了挑竹签这一经典的游戏. 挑竹签,就是在桌上摆上一把竹签,每次从最上层挑走一根竹签.如果动了其他的竹签,就要换对手来挑.在所有的竹签都被 ...

  2. 2020.7.24 T3终章-剑之魂(jz暑假训练day9)

    Description [背景介绍] 古堡,暗鸦,斜阳,和深渊-- 等了三年,我独自一人,终于来到了这里-- "终焉的试炼吗?就在这里吗?"我自言自语道. "终焉的试炼啊 ...

  3. 2020.7.22 T3押韵(jz暑假训练day7)

    Description 小A非常喜欢所有押韵的东西,他认为两个单词押韵当且仅当他们的公共后缀的长度和两个单词中最长的单词的长度相等,或者是最长的单词的长度减一.也就是说LCS(A,B)>=max ...

  4. 暑假训练-义乌(7.8-7.15)

    暑假训练 模拟赛 图表 数据 7.8(lxl) 7.9(lxl) 7.10(lxl) 7.11(lxl) 7.12(wls) 7.13(wls) 7.14(wls) 7.15(lfds) 训练 数据结 ...

  5. “诺奖风向标”--2020年斯隆研究奖公布,其中有16位华人学者获奖!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 当地时间2020年2月12日,艾尔弗·斯隆基金会(The Alfred P. Sl ...

  6. 【ECJTU_ACM 11级队员2012年暑假训练赛(8) - F - A Mame】

    Home Problems Status Contest Register Login B题要套一个数论的模版,注意m=1!! C题可以二分匹配,把行列看作点; 不能开百度,开谷歌搜题解,再次强调!一 ...

  7. JZOJ2018.07.12【2018提高组】模拟B组 魔道研究

    4270. [NOIP2015模拟10.27]魔道研究 题目描述 "我希望能使用更多的魔法.不对,是预定能使用啦.最终我要被大家称呼为大魔法使.为此我决定不惜一切努力." --&l ...

  8. 垃圾ACMer的暑假训练220716

    垃圾ACMer的暑假训练220716 Codeforces Codeforces Round #807 (Div. 2) A. Mark the Photographer 原题指路:https://c ...

  9. 长沙学院2022暑假训练赛(一)六级阅读

    D-六级阅读_长沙学院2022暑假训练赛(一) (nowcoder.com)https://ac.nowcoder.com/acm/contest/38762/D链接:登录-专业IT笔试面试备考平台_ ...

最新文章

  1. 菜鸟学习.Net的感想!
  2. MariaDB 视图与触发器(11)
  3. 窗口缩小 怎么让定位的盒子不动_盒子模型
  4. 综艺节目php灭灯_非诚勿扰php程序员 结果遭女嘉宾瞬间全灭灯
  5. OpenSSL 编程 - RSA 加密解密
  6. ubuntu网络配置
  7. 一起学React--组件定义和组件通讯
  8. java把对象转成json_java 把对象 对象转换成json字符串 | 学步园
  9. django mysql connector,MySQL Connector / python在Django中不起作用
  10. LeetCode 717. 1-bit and 2-bit Characters
  11. asp.net mvc 前台使用后台变量
  12. python+flask编写一个简单的登录接口例子
  13. 如何杀掉服务器的进程
  14. [hashmap|空间换时间] leetcode 1 两数之和
  15. php美顏滤镜,PHP GIF / PNG True Colorize滤镜,可保留亮度和Alpha
  16. 我学Flash/Flex(2):AS3读取XML文件内容
  17. java cipher.dofinal_cipher.dofinal方法
  18. 使用SVM和决策树实现客户贷款逾期分析
  19. 三国史诗——三国官制(一)
  20. 稳定的围棋服务器,中国古典围棋服务器对奕说明

热门文章

  1. Dplayer实现弹幕功能
  2. 《Linux指令从入门到精通》——4.2 Linux下的简单文字模式文本编辑器
  3. HTML5 CSS控制Table内外边框、颜色、大小示例
  4. IT“咏叹调”之--你公司哪个部门是“老大”?
  5. Fatal error: Uncaught Error: Call to undefined function mysqli_content() in D:\phpstudy_pro\WWW\user
  6. 【路径规划】基于matlab拓扑图和跟随领导者机器人编队路径规划【含Matlab源码 2500期】
  7. 周鸿袆:给程序员忠言逆耳的几条建议
  8. oracle 日期改字符格式_Oracle时间转换成字符串
  9. speak failed:not bound to TTS engine解决方案
  10. 20190925-ORA-00600错误及被注入的软件