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. 用python的turtle作图(一)静态图

    最近,花了点时间,用python画图. 主要包括三部分,简单的静态图形,复杂的组合图形,图形动画. (一)画静态图形 长方形, 圆, 三角形, 平行四边形, 五角星 (二)图形的组合 笑脸, 国旗, ...

  2. ConcurrentHashMap (jdk1.7)源码学习

    一.介绍 1.Segment(分段锁) 1.1 Segment 容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并 ...

  3. .net core 和 WPF 开发升讯威在线客服系统:调用有道翻译接口实现实时自动翻译的方法

    业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...

  4. Gradle进行Build 报GBK错误

    如上图,码主电脑windows,公司用的gradle进行项目build,本地进行build,总是出现这种GBK错误. 本身知道这是文件的编码问题:一般文件都是UTF-8编码,compilejava 默 ...

  5. 漏洞CVE 2017-8464

    概述 微软的Patch Tuesday更新发布了多达95个针对Windows.Office.Skype.IE和Edge浏览器的补丁.其中27个涉及远程代码执行,18个补丁被微软设定为严重(Critic ...

  6. Pentest Box之疑难杂症(解决)

    问题一:metasploit连不上数据库怎么破???? 1.首先找到配置路径:F:\bin\customtools (F代表:pentest box整个路径) 2. 编辑 customaliases ...

  7. 快来用这款BI分析工具,摆脱数据分析的困扰

    ​互联网.物联网时代,数据激增是正常现象,但这给公司信息部门和数据分析师带来了巨大的工作量.根据以前的分析方法,有必要详细而深入地完成分析报告,即使借助数据分析工具,也要花费大量的时间和人力,更不用说 ...

  8. 常用windows快捷键及cmd、dos命令

    Windows常用快捷键 #Alt+F4:关闭窗口.网页 #ctrl+C:复制 #ctrl+V:粘贴 #ctrl+X:剪切 #ctrl+Z:撤销 #ctrl+A:全选 #ctrl+S:保存 #shif ...

  9. 解决overlay2存储驱动的磁盘配额问题

    为啥要用overlay2 docker centos(内核3.10)上默认存储驱动是devicemapper 的loop-lvm模式,这种模式是用文件模拟块设备,不推荐生产使用direct lvm又不 ...

  10. C# 使用NPOI处理Excel模板-【前面部分固定,中间是动态的几行,尾部是固定的部分】

    今天同组的兄弟问我,他有一个导出的模板,大概如下: [前面部分固定,中间是动态的几行,尾部是固定的部分].其实这个很像单链表往单链表在指定插入数据. 他问我怎么做才好,他想到的做法是:因为这些动态列的 ...