[THUPC2017] 天天爱射击 题解
俗话说的好,正难则反,既然不好想每一个子弹能打碎多少个木板,不如想每个木板被那枚子弹打碎。
然后就是显然的整体二分。由于可能木板不会被击碎,那些木板的分数会累加到最后一个子弹上,因此我们可以加一枚背锅弹,承担多余的分数。
时间复杂度 \(O((n+m)\log^2 m)\)。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+5;
int n,m,c[N],sm[N];
struct que{
int l,r,s,o,id;
}q[N*2],q1[N*2],q2[N*2];
void add(int x,int k){
for(;x<=m+1;x+=x&-x)
c[x]+=k;
}int sum(int x){
if(!x) return 0;
int re=0;
for(;x;x-=x&-x)
re+=c[x];
return re;
}void dichot(int l,int r,int ql,int qr){
if(ql>qr) return;
if(l==r){
for(int i=ql;i<=qr;i++)
if(!q[i].o) sm[l]++;
return;
}int t1=0,t2=0,mid=(l+r)/2;
for(int i=ql;i<=qr;i++){
if(q[i].o){
if(q[i].id<=mid){
add(q[i].s,1);
q1[++t1]=q[i];
}else q2[++t2]=q[i];
continue;
}int x=sum(q[i].r)-sum(q[i].l-1);
if(q[i].s>x){
q[i].s-=x;
q2[++t2]=q[i];
}else q1[++t1]=q[i];
}for(int i=1;i<=t1;i++){
if(q1[i].o) add(q1[i].s,-1);
q[i+ql-1]=q1[i];
}for(int i=1;i<=t2;i++)
q[i+ql+t1-1]=q2[i];
dichot(l,mid,ql,ql+t1-1);
dichot(mid+1,r,ql+t1,qr);
}int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=m+1;i<=n+m;i++)
cin>>q[i].l>>q[i].r>>q[i].s;
for(int i=1;i<=m;i++)
cin>>q[i].s,q[i].id=i,q[i].o=1;
dichot(1,m+1,1,n+m);
for(int i=1;i<=m;i++)
cout<<sm[i]<<"\n";
return 0;
}//Kaká
[THUPC2017] 天天爱射击 题解的更多相关文章
- 【LOJ#2402】[THUPC2017]天天爱射击(整体二分)
[LOJ#2402][THUPC2017]天天爱射击(整体二分) 题面 LOJ 题解 显然对于每块木板可以二分被打烂的时间. 那么直接上整体二分处理就行了. #include<iostream& ...
- 「NOIP2016」天天爱跑步 题解
(声明:图片来源于网络) 「NOIP2016」天天爱跑步 题解 题目TP门 题目 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是 ...
- NOIP2016天天爱跑步 题解报告【lca+树上统计(桶)】
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 nn个 ...
- NOIP2016(D1T2)天天爱跑步题解
首先声明这不是一篇算法独特的题解,仍然是"LCA+桶+树上差分",但这篇题解是为了让很多很多看了很多题解仍然看不懂的朋友们看懂的,其中就包括我,我也在努力地把解题的"思维 ...
- Noip 2016 天天爱跑步 题解
[NOIP2016]天天爱跑步 时间限制:2 s 内存限制:512 MB [题目描述] 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是 ...
- [NOIP2016]天天爱跑步 题解(树上差分) (码长短跑的快)
Description 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要 玩家每天按时上线,完成打卡任务.这个游戏的地图 ...
- LuoguP7426 [THUPC2017] 体育成绩统计 题解
Update \(\texttt{2021.3.11}\) 修复了一个笔误. Content 太长了,请直接跳转回题面查看. 数据范围:\(n\leqslant 10^4\),\(0\leqslant ...
- 【LOJ2402】「THUPC 2017」天天爱射击 / Shooting(整体二分)
点此看题面 大致题意: 有\(n\)个区间,每个区间有一个权值,当权值变成\(0\)时消失.每个时刻将覆盖某一位置的所有区间权值减\(1\),求每个时刻有多少个区间在这一刻消失. 前言 整体二分裸题啊 ...
- [NOIP2016]天天爱跑步-题解
题面传送门 解答 设第\(j\)号玩家在\(V_j\)时刻出发. 弱化问题:如果树退化成了一条链.则在\(j\)处的观察员能观察到的\(i\)号玩家当且仅当 \[ i玩家经过j,且 \begin{ca ...
- 洛谷P1600 天天爱跑步——题解
题目传送 首先要考虑入手点.先考虑一个一个玩家处理,显然不加优化的话,时间复杂度是O(n)的.发现对于玩家路径上的点都有一个观察员,一个都不能忽视,看起来是很难优化了.在做题时,发现一个思路很难想,就 ...
随机推荐
- PYENV安装与使用
1.概述 pyenv 是一个python的版本管理软件,通过他,我们可以 方便的安装python 的版本,切换版本,解决版本不同带来问题. 2.安装pyenv 我们可以通过链接下载pyenv http ...
- vue表格轮播插件
1.前言 需求:制作大屏看板时,经常要展示表格数据,通常一页时放不下的,表格需要自动滚动,并维持表头固定 为何自己封装:网上的滚动组件有2类,一种传入json数据进行滚动(DataV),优点是可以做到 ...
- 《JavaScript 模式》读书笔记(5)— 对象创建模式3
这一篇,我们主要来学习了解下沙箱模式以及静态成员的相关内容. 五.沙箱模式 沙箱模式(sandbox pattern)解决了命名空间模式的如下几个缺点: 对单个全局变量的依赖变成了对应用程序的全局变量 ...
- CVE-2023-31436 数组越界漏洞
CVE-2023-31436 数组越界漏洞 drawio: CVE-2023-31436.drawio 漏洞分析 在 qfq_change_class 里面如果用户态没有提供 TCA_QFQ_LM ...
- 【Amadeus原创】Docker安装wikijs wiki系统
拉取mysql8的镜像并运行 docker pull mysql docker run -d -v /data/mysql/data:/var/lib/mysql -v /data/mysql/con ...
- Windows的树形目录结构
一.文件.文件夹(目录).逻辑盘.路径的概念 · 文件:是操作系统用来存储和管理信息的基本单位.每个文件都有一个名称,叫文件名.文件名通常由基本文件名和扩展名两部分组成,其中基本文件名用于说明文件 ...
- Linux系统安装python3.8与卸载教程
ln -sf /usr/local/python311/bin/python3.11 /usr/local/bin/python3ln -sf /usr/local/python311/bin/pyd ...
- 盘点5个常用的.Net依赖注入框架!
盘点5个常用的依赖注入框架,特别是前面2个. 1.Microsoft.Extensions.DependencyInjection 这是.Net Core框架本身内置集成的,我们只需引入Microso ...
- ERROR: SSL peer shut down incorrectly错误解决(Android Studio)
错误信息:ERROR: SSL peer shut down incorrectly错误解决(Android Studio) 错误原因:android studio在下载"gradle-4. ...
- IM通讯协议专题学习(二):快速理解Protobuf的背景、原理、使用、优缺点
本文由vivo技术团队Li Guanyun分享,为了提升阅读体验,进行了较多修订和重新排版. 1.引言 Protobuf 作为一种跨平台.语言无关.可扩展的序列化结构数据通讯协议,已广泛应用于网络数据 ...