P6619-[省选联考2020A/B卷]冰火战士【树状数组二分】
正题
题目链接:https://www.luogu.com.cn/problem/P6619
题目大意
有火系战士和冰系战士有一个温度和一个战斗力,每次加入或删除一个战士,要求一个最大的kkk使得温度不低于kkk的火系战士战斗力和温度不高于kkk的冰系战士战斗力和的最小值最大。
解题思路
不考虑kkk的话,对于这个答案很好求,我们只要求一个位置使得前面减去后面的和最小即可。这个可用树状数组上二分即可求出其中位置。考虑如何求最大的kkk,我们就是要求该位置开始后面的第一个火系战士即可,定义它的前面一个位置的前面有www个火系战士,也就是求第w+1w+1w+1个,也可以用树状数组上二分解决。
时间复杂度O(nlogn)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卷]冰火战士【树状数组二分】相关推荐
- P7518-[省选联考2021A/B卷]宝石【主席树,二分】
正题 题目链接:https://www.luogu.com.cn/problem/P7518 题目大意 给出nnn个点的一棵树,每个点上有不大于mmm的数字. 然后给出一个长度为ccc的各个位数不同的 ...
- P6624-[省选联考2020A卷]作业题【矩阵树定理,欧拉反演】
正题 题目链接:https://www.luogu.com.cn/problem/P6624 题目大意 nnn个点的一张图,每条边有权值,一棵生成树的权值是所有边权和乘上边权的gcdgcdgcd,即 ...
- P6623-[省选联考2020A卷]树【Trie,树上启发式合并】
正题 题目链接:https://www.luogu.com.cn/problem/P6623 题目大意 一棵树,每个节点有一个权值valival_ivali,定义disi,jdis_{i,j}dis ...
- [省选联考 2020 A/B 卷] 冰火战士(树状数组上二分)
文章目录 problem solution(10pts) code(10pts) solution(30pts) code(30pts) solution(60pts) code(60pts) sol ...
- 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 ...
- P7520-[省选联考 2021 A 卷]支配
正题 题目链接:https://www.luogu.com.cn/problem/P7520 题目大意 给出nnn个点mmm条边的一张有向图,一号点为起始点,qqq次独立的询问加入一条边后有多少个点的 ...
- P7516-[省选联考2021A/B卷]图函数【bfs】
正题 题目链接:https://www.luogu.com.cn/problem/P7516 题目大意 懒了,直接抄题意了 对于一张 nnn 个点 mmm 条边的有向图 GGG(顶点从 1∼n1 \s ...
- P6628-[省选联考 2020 B 卷] 丁香之路【欧拉回路,最小生成树】
正题 题目链接:https://www.luogu.com.cn/problem/P6628 题目大意 给出nnn个点的一张完全无向图,i∼ji\sim ji∼j的边权是∣i−j∣|i-j|∣i−j∣ ...
- 省选联考 2020 A 卷
省赛虽然炸了,但题解还是要写滴(笑) 第 200 篇 b l o g 祭 ! ! \Huge 第200篇blog祭!! 第200篇blog祭!! 组合数问题 题意简单明了 首先要看出要把多项式的每一项 ...
最新文章
- js 获取样式兼容方法
- linux 产生0~9内的随机数
- slatstack Master的配置
- 《it创业疯魔史》读后有感
- OpenStack Weekly Rank 2015.08.24
- solaris linux nfs,solaris 10 nfs服务配置
- python路径在哪里设置_找Python安装目录,设置环境路径以及在命令行运行python脚本实例...
- UGUI字体不清楚——终极探索
- spring mvc路径匹配原则
- XML文件源码察看器(三)
- (黑苹果efi文件)B550-I Ryzen 9 5950X RX 5700 XT 黑苹果efi引导文件
- 学术答辩PPT模板推荐
- Android--手机一键Root原理分析
- nginx 同一服务器部署多个网站
- 人工智能工程师一般需要学什么?
- 计算机网络汇聚层,【大白电气】接入层、汇聚层、核心层——中大型计算机网络系统结构介绍及交换机选型建议...
- 斐讯n1刷鸿蒙系统,【总结】在N1上面成功刷入armbian并启动的步骤
- 小鲲Python嘎嘎炫~day1.4
- warning:iteration 7 invokes undefined behavior
- cannot connect to host的解决办法
热门文章
- 自定义依赖注解无效_最详细的自定义Spring Boot Starter开发教程
- 怎样用python批量处理文件夹_python批量处理文件或文件夹
- python如何封装成可调用的库_Python实现打包成库供别的模块调用
- 数字调制系统工作原理_空间光调制器工作原理是什么 空间光调制器工作原理...
- ios realm 文件_iOS开发中使用Realm数据库
- leetcode977. 有序数组的平方(暴力+双指针)
- 34. 在排序数组中查找元素的第一个和最后一个位置012(二分查找+思路+详解+两种方法)Come Baby!!!!!!!! !
- mysql表缓冲大小可能设置过小_MySQL 5.7 my.cnf配置文件详解
- [Java基础]字符串中的编码解码问题
- C++this指针的用途