正题

题目链接:https://www.luogu.com.cn/problem/P6619


题目大意

有火系战士和冰系战士有一个温度和一个战斗力,每次加入或删除一个战士,要求一个最大的kkk使得温度不低于kkk的火系战士战斗力和温度不高于kkk的冰系战士战斗力和的最小值最大。


解题思路

不考虑kkk的话,对于这个答案很好求,我们只要求一个位置使得前面减去后面的和最小即可。这个可用树状数组上二分即可求出其中位置。考虑如何求最大的kkk,我们就是要求该位置开始后面的第一个火系战士即可,定义它的前面一个位置的前面有www个火系战士,也就是求第w+1w+1w+1个,也可以用树状数组上二分解决。

时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define lowbit(x) (x&-x)
using namespace std;
const int N=2e6+10;
int n,cnt,op[N],t[N],x[N],y[N];
int T,M,b[N],ti[N],tf[N],tn[N],sf;
void Change(int x,int ice,int fire,int p){while(x<=M){ti[x]+=ice;tf[x]+=fire;tn[x]+=p;x+=lowbit(x);}sf+=fire;return;
}
int Query(int x,int ice,int fire,int p){int ans=0;while(x){ans+=ice*ti[x]+fire*tf[x]+tn[x]*p;x-=lowbit(x);}return ans;
}
int Ask1(){int zf=0,zi=0,l=1,r=M;while(l<r){int mid=(l+r)>>1;if(zi+ti[mid]>sf-zf-tf[mid])r=mid;else l=mid+1,zi+=ti[mid],zf+=tf[mid];}return l;
}
int Ask2(int x){int l=1,r=M,sum=0;while(l<r){int mid=(l+r)>>1;if(tn[mid]+sum>=x)r=mid;else l=mid+1,sum+=tn[mid];}return l;
}
int Calc(int x)
{return min(Query(x,1,0,0),sf-Query(x-1,0,1,0));}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d",&op[i],&t[i]);if(op[i]==1){scanf("%d%d",&x[i],&y[i]);b[++cnt]=x[i];}}T=(int)log(n)/log(2)+1;M=(1<<T);sort(b+1,b+1+cnt);cnt=unique(b+1,b+1+cnt)-b-1;for(int i=1;i<=n;i++){if(op[i]==1){ x[i]=lower_bound(b+1,b+1+cnt,x[i])-b;Change(x[i],(!t[i])*y[i],t[i]*y[i],t[i]);}else{int k=t[i];Change(x[k],-(!t[k])*y[k],-t[k]*y[k],-t[k]);}int a1=Ask1();a1=Query(a1-1,0,0,1);int b1=Calc(a1=Ask2(a1+1));if(!b1)printf("Peace\n");else printf("%d %d\n",b[a1],2*b1);}
}

P6619-[省选联考2020A/B卷]冰火战士【树状数组二分】相关推荐

  1. P7518-[省选联考2021A/B卷]宝石【主席树,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/P7518 题目大意 给出nnn个点的一棵树,每个点上有不大于mmm的数字. 然后给出一个长度为ccc的各个位数不同的 ...

  2. P6624-[省选联考2020A卷]作业题【矩阵树定理,欧拉反演】

    正题 题目链接:https://www.luogu.com.cn/problem/P6624 题目大意 nnn个点的一张图,每条边有权值,一棵生成树的权值是所有边权和乘上边权的gcdgcdgcd,即 ...

  3. P6623-[省选联考2020A卷]树【Trie,树上启发式合并】

    正题 题目链接:https://www.luogu.com.cn/problem/P6623 题目大意 一棵树,每个节点有一个权值valival_ivali​,定义disi,jdis_{i,j}dis ...

  4. [省选联考 2020 A/B 卷] 冰火战士(树状数组上二分)

    文章目录 problem solution(10pts) code(10pts) solution(30pts) code(30pts) solution(60pts) code(60pts) sol ...

  5. P6620 [省选联考 2020 A 卷] 组合数问题(斯特林数、下降幂)

    解析 给出 n,x,pn,x,pn,x,p 和一个 mmm 次的多项式 f(k)f(k)f(k),求解: ∑k=0nf(k)xk(nk)modp\sum_{k=0}^nf(k)x^k\binom n ...

  6. P7520-[省选联考 2021 A 卷]支配

    正题 题目链接:https://www.luogu.com.cn/problem/P7520 题目大意 给出nnn个点mmm条边的一张有向图,一号点为起始点,qqq次独立的询问加入一条边后有多少个点的 ...

  7. P7516-[省选联考2021A/B卷]图函数【bfs】

    正题 题目链接:https://www.luogu.com.cn/problem/P7516 题目大意 懒了,直接抄题意了 对于一张 nnn 个点 mmm 条边的有向图 GGG(顶点从 1∼n1 \s ...

  8. P6628-[省选联考 2020 B 卷] 丁香之路【欧拉回路,最小生成树】

    正题 题目链接:https://www.luogu.com.cn/problem/P6628 题目大意 给出nnn个点的一张完全无向图,i∼ji\sim ji∼j的边权是∣i−j∣|i-j|∣i−j∣ ...

  9. 省选联考 2020 A 卷

    省赛虽然炸了,但题解还是要写滴(笑) 第 200 篇 b l o g 祭 ! ! \Huge 第200篇blog祭!! 第200篇blog祭!! 组合数问题 题意简单明了 首先要看出要把多项式的每一项 ...

最新文章

  1. js 获取样式兼容方法
  2. linux 产生0~9内的随机数
  3. slatstack Master的配置
  4. 《it创业疯魔史》读后有感
  5. OpenStack Weekly Rank 2015.08.24
  6. solaris linux nfs,solaris 10 nfs服务配置
  7. python路径在哪里设置_找Python安装目录,设置环境路径以及在命令行运行python脚本实例...
  8. UGUI字体不清楚——终极探索
  9. spring mvc路径匹配原则
  10. XML文件源码察看器(三)
  11. (黑苹果efi文件)B550-I Ryzen 9 5950X RX 5700 XT 黑苹果efi引导文件
  12. 学术答辩PPT模板推荐
  13. Android--手机一键Root原理分析
  14. nginx 同一服务器部署多个网站
  15. 人工智能工程师一般需要学什么?
  16. 计算机网络汇聚层,【大白电气】接入层、汇聚层、核心层——中大型计算机网络系统结构介绍及交换机选型建议...
  17. 斐讯n1刷鸿蒙系统,【总结】在N1上面成功刷入armbian并启动的步骤
  18. 小鲲Python嘎嘎炫~day1.4
  19. warning:iteration 7 invokes undefined behavior
  20. cannot connect to host的解决办法

热门文章

  1. 自定义依赖注解无效_最详细的自定义Spring Boot Starter开发教程
  2. 怎样用python批量处理文件夹_python批量处理文件或文件夹
  3. python如何封装成可调用的库_Python实现打包成库供别的模块调用
  4. 数字调制系统工作原理_空间光调制器工作原理是什么 空间光调制器工作原理...
  5. ios realm 文件_iOS开发中使用Realm数据库
  6. leetcode977. 有序数组的平方(暴力+双指针)
  7. 34. 在排序数组中查找元素的第一个和最后一个位置012(二分查找+思路+详解+两种方法)Come Baby!!!!!!!! !
  8. mysql表缓冲大小可能设置过小_MySQL 5.7 my.cnf配置文件详解
  9. [Java基础]字符串中的编码解码问题
  10. C++this指针的用途