博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ-1563-郁闷的出纳员(权值线段树)
阅读量:3897 次
发布时间:2019-05-23

本文共 1444 字,大约阅读时间需要 4 分钟。

偏移量要考虑清楚。

#include 
using namespace std;const int N=4e5+10;const int BASE=1e5+1;const int RIGHT=3e5+5e4;int segtree[N<<2],lazy[N<<2];void pushdown(int rt){
if (lazy[rt]) {
lazy[rt<<1]=lazy[rt<<1|1]=1; segtree[rt<<1]=segtree[rt<<1|1]=0; lazy[rt]=0; }}void Update(int val,int l,int r,int rt){
if (l==r) {
segtree[rt]++; return ; } pushdown(rt); int mid=(r+l)>>1; if (val<=mid) {
Update(val,l,mid,rt<<1); } else {
Update(val,mid+1,r,rt<<1|1); } segtree[rt]=segtree[rt<<1]+segtree[rt<<1|1];}void Delete(int L,int R,int l,int r,int rt){
if (L<=l&&r<=R) {
lazy[rt]=1; segtree[rt]=0; return ; } pushdown(rt); int mid=(l+r)>>1; if (L<=mid) {
Delete(L,R,l,mid,rt<<1); } if (mid
>1; if (segtree[rt<<1]>=val) {
return Query(val,l,mid,rt<<1); } else {
return Query(val-segtree[rt<<1],mid+1,r,rt<<1|1); }}int main(){
char op[10]; int n,min_sal,tot=0,num,offset=0; scanf("%d%d",&n,&min_sal); for (int i=0;i
=min_sal) {
tot++; Update(num+BASE+offset,1,RIGHT,1); } } else if (!strcmp(op,"A")) {
offset-=num; } else if (!strcmp(op,"S")) {
offset+=num; Delete(1,BASE+min_sal-1+offset,1,RIGHT,1); } else {
Delete(1,BASE+min_sal-1+offset,1,RIGHT,1); if (num>segtree[1]) {
puts("-1"); } else {
printf("%d\n",Query(segtree[1]-num+1,1,RIGHT,1)-BASE-offset); } } } printf("%d\n",tot-segtree[1]); return 0;}

转载地址:http://vruen.baihongyu.com/

你可能感兴趣的文章
通过make编译多文件的内核模块
查看>>
如何调试Javascript代码
查看>>
皮克斯宣布开源Universal Scene Description
查看>>
复盘:一个创业项目的失败之路
查看>>
阿里巴巴宣布加入Linux基金会
查看>>
为什么你应该尝试 “全栈”
查看>>
程序员什么时候该考虑辞职
查看>>
如何写一本书?
查看>>
加班能体现编程的热情吗?
查看>>
Hadley Wickham:一个改变了R的人
查看>>
glibc 指导委员会解散声明
查看>>
Linux创始者托瓦兹谈及IoT --「安全在其次」
查看>>
传感器数据分析(Sensor Data Analytics)是什么?
查看>>
智能硬件开发如何选择低功耗MCU?
查看>>
阿里感悟(十)如何写好简历
查看>>
阿里感悟(十一)如何准备面试
查看>>
软件架构入门
查看>>
80 多个 Linux 系统管理员必备的监控工具
查看>>
OOD的原则
查看>>
Tool to trace local function calls in Linux
查看>>