luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分)
luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分)
题外话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 卷]冰火战士(线段树,二分)的更多相关文章
- [省选联考 2020 A/B 卷] 冰火战士
一.题目 点此看题 二.解法 其实这道题也不是特别难吧 \(......\) 但树状数组上二分是我第一次见. 我们把冰人和火人都按温度排序,那么考虑一个分界线 \(x\) ,问题就是求冰数组 \(x\ ...
- 题解 P6622 [省选联考 2020 A/B 卷] 信号传递
洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...
- luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp)
luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. ...
- [省选联考 2020 A 卷] 组合数问题
题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...
- luoguP6623 [省选联考 2020 A 卷] 树(trie树)
luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...
- luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数)
luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数) Luogu 题外话: LN切这题的人比切T1的多. 我都想到了组合意义乱搞也想到可能用斯特林数为啥还是没做出来... 我怕 ...
- luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理)
luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理) Luogu 题外话: Day2一题没切. 我是傻逼. 题解时间 某种意义上说刻在DNA里的柿子,大概是很多人学 ...
- [省选联考 2021 A/B 卷] 卡牌游戏
垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...
- P5283 [十二省联考2019]异或粽子 可持久化01Trie+线段树
$ \color{#0066ff}{ 题目描述 }$ 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 \(n\) 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 ...
随机推荐
- 树莓派GPIO开发(二)RGB模块-PWM调节
配置环境 系统:Raspbian11(官方64位) 设备:树莓派CM4 一.PWM简单介绍 全称:Pulse-width modulation,脉冲宽度调制,简单的数模转换方法 1.基本原理 脉冲宽度 ...
- Swagger2简单实用
前后端分离很好用的api <!--swagger--> <dependency> <groupId>io.springfox</groupId> < ...
- Django创建第一个应用App(3)
创建一个投票的应用app.现在已经创建好了一个项目,就是有了一个框架,有了框架之后就可以往框架里面填写一些自己的需求,就是放一些功能在里面即可.一个项目可以包含多个应用app,一个应用app可以属于多 ...
- [数据生成器]UVA10054 The Necklace
应吴老师之邀,写了个数据生成器. 目前这个数据生成器可以保证生成的数据都是合法的,且效率也还不错.只是在建立普通连通图的时候zyy偷懒了,直接把所有点串起来从而保证图的连通.如果有大神有更好的方法请不 ...
- PON/产线测试解决方案
第一章 方案背景与概述1.1 方案背景随着网络的高速发展与网络速率的不断提升,用户对网络产品的可靠性要求也越来 越高.网络产品的故障符合"浴盆曲线"规律,生产过程中的严格测试能够及 ...
- 想用WPS 2019模板设计报表?Smartbi V9没问题
导读:Smartbi V9 报表设计器可以支持WPS 2019个人版了,而且报表功能也有明显增强. 企业报表软件(Smartbi Spreadsheet)是思迈特软件于2014年针对企业客户.系统 ...
- 【C#TAP 异步编程】构造函数 OOP
原文:异步 OOP 2:构造函数 (stephencleary.com) 异步构造带来了一个有趣的问题.能够在构造函数中使用会很有用,但这意味着构造函数必须返回一个表示将来将构造的值,而不是构造的值. ...
- 【C# 线程】Thread类 以及使用案例
System.Threading.Thread类 涉及到的类和枚举 Volatile 类Interlocked 类SpinLock 类SpinWait类Barrier 类ThreadLocal< ...
- 【C#基础概念】常量
常量的定义 常量是在编译时设置其值并且永远不能更改其值的字段. 使用常量可以为特殊值提供有意义的名称,而不是数字文本 常量是不可变的值,在编译时是已知的,在程序的生命周期内不会改变. 常量使用 con ...
- Oracle之数据库的连接
Oracle 默认用户 数据库创建完毕后,需要设置数据库的默认用户.Oracle中为管理员预置了两个用户分别是SYS和SYSTEM.SYS的初始密码为Oracle安装时设置的数据库口令 admin,在 ...