luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分)

Luogu

题外话1:

LN四个人切D1T2却只有三个人切D1T1

很神必

我是傻逼。

题外话2:

1e6的数据直接io?

这野蛮至极你知道吗。

出题人这是要向全国人民谢罪的。

题解时间

70pts:

求最大的 $ min(presum0[i],sufsum1[i]) $ 。

一个前缀和,一个后缀和。

二分+树状数组可以找到答案。

对于输出最大温度,再二分一次。

$ O( n log ^ {2} n ) $ 。

100pts:

上面两个都改成直接线段树上二分就是一个 $ log $ 。

离散化一下减少常数便于操作。

详情看代码。

虽然洛谷上卡而且考试时没有O2,但是你要相信吸吸艾富用无数选手缴纳的费用购置的8700k的力量(

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long lint;
template<typename TP>inline void read(TP &tar)
{
TP ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){ret=ret*10+(ch-'0');ch=getchar();}
tar=ret*f;
}
namespace RKK
{
const int N=2000011;
struct ques{int t,s,x,v;}q[N];
int lst[N<<1],n;
int qaq;
int find1(int x)
{
int l=1,r=n,m;
while(l<=r)
{
m=l+r>>1;
if(lst[m]==x) return m;
else if(lst[m]<x) l=m+1;
else r=m-1;
}
}
int find0(int x)
{
int ret=n+1,l=1,r=n,m;
while(l<=r)
{
m=l+r>>1;
if(lst[m]>=x) ret=m,r=m-1;
else l=m+1;
}
return ret;
}
int v[N<<2][2];
void edit(int s,int w,int x,int px=1,int pl=0,int pr=n)
{
if(pl==pr){v[px][s]+=w;return;}
int pm=pl+pr>>1;
if(x<=pm) edit(s,w,x,px<<1,pl,pm);
else edit(s,w,x,px<<1|1,pm+1,pr);
v[px][s]=v[px<<1][s]+v[px<<1|1][s];
}
int sa[2],ans,ansi,p[2];
void getans(int px=1,int pl=0,int pr=n)
{
if(pl==pr) return;
int pm=pl+pr>>1;
p[0]=sa[0]+v[px<<1][0],p[1]=sa[1]+v[px<<1|1][1];
int tmp=min(p[0],p[1]);
if(tmp>ans) ans=tmp,ansi=pm+1;
if(p[0]<p[1]) sa[0]+=v[px<<1][0],getans(px<<1|1,pm+1,pr);
else if(p[0]>p[1]) sa[1]+=v[px<<1|1][1],getans(px<<1,pl,pm);
else return;
}
void query(int px=1,int pl=0,int pr=n)
{
if(pl==pr) return;
int pm=pl+pr>>1;
if(pm+1<=ansi) sa[0]+=v[px<<1][0],query(px<<1|1,pm+1,pr);
else
{
p[0]=sa[0]+v[px<<1][0],p[1]=sa[1]+v[px<<1|1][1];
int tmp=min(p[0],p[1]);
if(tmp==ans)
{
ansi=pm+1;
sa[0]+=v[px<<1][0],query(px<<1|1,pm+1,pr);
}else sa[1]+=v[px<<1|1][1],query(px<<1,pl,pm);
}
} int main()
{
read(qaq);for(int i=1;i<=qaq;i++)
{
read(q[i].t),read(q[i].s);
if(q[i].t==1)
{
read(q[i].x),read(q[i].v);
if(q[i].s==1) lst[++n]=q[i].x;
}
}
sort(lst+1,lst+1+n),n=unique(lst+1,lst+1+n)-(lst+1);
int ans1=0,ans2=0;
for(int i=1;i<=qaq;i++)
{
if(q[i].t==1)
{
if(q[i].s==1) q[i].x=find1(q[i].x),edit(1,q[i].v,q[i].x);
else q[i].x=find0(q[i].x),edit(0,q[i].v,q[i].x-1);
}else
{
int j=q[i].s;
if(q[j].s==1) edit(1,-q[j].v,q[j].x);
else edit(0,-q[j].v,q[j].x-1);
}
sa[0]=sa[1]=0,ansi=ans=0;
getans();
sa[0]=sa[1]=0;;
if(ans) query();
if(ans==0) puts("Peace");
else printf("%d %d\n",lst[ansi],ans*2);
}
return 0;
}
}
int main(){return RKK::main();}

luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分)的更多相关文章

  1. [省选联考 2020 A/B 卷] 冰火战士

    一.题目 点此看题 二.解法 其实这道题也不是特别难吧 \(......\) 但树状数组上二分是我第一次见. 我们把冰人和火人都按温度排序,那么考虑一个分界线 \(x\) ,问题就是求冰数组 \(x\ ...

  2. 题解 P6622 [省选联考 2020 A/B 卷] 信号传递

    洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...

  3. luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp)

    luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. ...

  4. [省选联考 2020 A 卷] 组合数问题

    题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...

  5. luoguP6623 [省选联考 2020 A 卷] 树(trie树)

    luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...

  6. luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数)

    luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数) Luogu 题外话: LN切这题的人比切T1的多. 我都想到了组合意义乱搞也想到可能用斯特林数为啥还是没做出来... 我怕 ...

  7. luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理)

    luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理) Luogu 题外话: Day2一题没切. 我是傻逼. 题解时间 某种意义上说刻在DNA里的柿子,大概是很多人学 ...

  8. [省选联考 2021 A/B 卷] 卡牌游戏

    垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...

  9. P5283 [十二省联考2019]异或粽子 可持久化01Trie+线段树

    $ \color{#0066ff}{ 题目描述 }$ 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 \(n\) 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 ...

随机推荐

  1. MyBatis功能点二:plugins插件使用

    MyBatis自定义插件使用步骤(已有pojo及mapper的基础上) 一.自定义插件,实现Interceptor接口 二.核心配置文件sqlMapConfig.xml文件增加插件相关内容 测试 测试 ...

  2. Ubuntu20.04 Focal Cloudimage扩容以及KVM安装的问题记录

    运行Ubuntu20.04的KVM虚机遇到一些问题, 单独总结一下 镜像扩容 不能用virt-resize --expand /dev/sda1 old.qcow2 new.qcow2这样的命令, 这 ...

  3. Meterpreter后渗透阶段关闭防火墙与杀毒软件

  4. 【C# Parallel】开端

    使用条件 1.必须熟练掌握锁.死锁.task的知识,他是建立这两个的基础上的.task建立在线程和线程池上的. 2.并不是所有代码都适合并行化. 例如,如果某个循环在每次迭代时只执行少量工作,或它在很 ...

  5. vs2019 NuGet安装及简单使用

    Nuget介绍 官网定义:NuGet是.NET的软件包管理器(免费).NuGet客户端工具提供了生成和使用软件包的能力.NuGet Gallery 是所有软件包作者和消费者都使用的中央软件包存储库. ...

  6. Java课程设计---项目数据库设计(含实体类)

    1.表设计 (1)新建表tb_student(学生表) (2)新建表tb_admin(管理员表) (3)新建表tb_teacher(教师表) (4)新建表tb_course(课程表) (5)新建表tb ...

  7. Python:构建可执行exe文件

    学习自: Python 程序打包成 exe 可执行文件 - 不夜男人 - 博客园 Python生成Windows可执行exe文件 - 韩小北 - 博客园 pyinstaller参数介绍以及总结_Bea ...

  8. pandas模块篇(之三)

    今日内容概要 目标:将Pandas尽量结束 如何读取外部excel文件数据到DataFrame中 针对DataFrame的常用数据操作 索引与切片 操作DataFrame的字段名称 时间对象序列操作 ...

  9. FoveaBox:细节差别,另一种DenseBox+FPN的Anchor-free方案 | IEEE TIP 2020

    作为与FCOS和FSAF同期的Anchor-free论文,FoveaBox在整体结构上也是基于DenseBox加FPN的策略,主要差别在于FoveaBox只使用目标中心区域进行预测且回归预测的是归一化 ...

  10. COS 音视频实践 | 数据工作流助你播放多清晰度视频

    前言 你是否遇到过这样的场景: 兴致勃勃地观看心爱的视频,正当到了激动人心的高潮部分,却突然因为网速过差被迫陷入"转圈圈"的人生以及社会的大思考中. 又或者是身为网速畅通无阻的vi ...