Supercomputer 解题报告
Supercomputer

设\(f_i\)为前\(i\)个时间内必须的完成的任务个数,那么答案就是
\]
现在要支持区间加和全局\(\max\)
考虑分块,对每个块维护一个\(tag\)表示加标记
块内的\(\max\)则为
\]
则把\(k=\frac{1}{i},b=\frac{f_i}{i}\),就对一个块维护一个关于直线的上凸壳
然后发现\(tag\)是单增的,所以可以均摊\(O(n)\)的在每个块的凸壳上维护
修改的时候不满一块的暴力重构块,否则打tag上去
Code:
#include <cstdio>
#include <cctype>
#include <cmath>
#include <algorithm>
#define ll long long
using std::max;
using std::min;
const int N=1e5+10;
const int B=350;
template <class T>
void read(T &x)
{
	x=0;char c=getchar();
	while(!isdigit(c)) c=getchar();
	while(isdigit(c)) x=x*10+c-'0',c=getchar();
}
int n,m,q,ans,T,L[B],R[B],belong[N],yuy[N];
struct koito_yuu
{
	int x,y;
	//k=1/x,b=y/x
	koito_yuu(){}
	koito_yuu(int X,int Y){x=X,y=Y;}
};
bool ck(koito_yuu a,koito_yuu b,koito_yuu c)
{
	return (1.0*a.x*b.y-1.0*b.x*a.y)*(c.x-b.x)>=(1.0*b.x*c.y-1.0*c.x*b.y)*(b.x-a.x);
}
struct Block
{
	koito_yuu s[B];
	int tot,tag;
	void build(int x)
	{
	    tot=0;
		for(int i=L[x];i<=R[x];i++)
		{
			koito_yuu pot=koito_yuu(i,yuy[i]);
			while(tot>1&&ck(pot,s[tot],s[tot-1])) --tot;
			s[++tot]=pot;
		}
	}
	void Move()
	{
		while(tot>1&&(1ll*(tag+s[tot].y)*s[tot-1].x)<=1ll*(tag+s[tot-1].y)*s[tot].x) --tot;
		ans=max(ans,(tag+s[tot].y-1)/s[tot].x+1);
	}
}bee[B];
void query()
{
	for(int i=1;i<=T;i++)
		bee[i].Move();
}
int main()
{
    freopen("computer.in","r",stdin);
    freopen("computer.out","w",stdout);
	read(n),read(m),read(q);
	for(int x,i=1;i<=m;i++) read(x),++yuy[x];
	for(int i=1;i<=n;i++) yuy[i]+=yuy[i-1];
	int b=sqrt(n)+1;T=(n-1)/b+1;
	for(int i=1;i<=T;i++)
	{
		L[i]=R[i-1]+1,R[i]=min(i*b,n);
		for(int j=L[i];j<=R[i];j++) belong[j]=i;
		bee[i].build(i);
	}
	query();
	printf("%d\n",ans);
	for(int k,v,i=1;i<=q;i++)
	{
		read(k),read(v);
		int bl=belong[v];
		for(int j=v;j<=R[bl];j++) yuy[j]+=k;
		bee[bl].build(bl);
		for(int j=bl+1;j<=T;j++) bee[j].tag+=k;
		query();
		printf("%d\n",ans);
	}
	return 0;
}
2019.3.26
Supercomputer 解题报告的更多相关文章
- CH Round #56 - 国庆节欢乐赛解题报告
		
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
 - 二模13day1解题报告
		
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
 - BZOJ 1051 最受欢迎的牛 解题报告
		
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
 - 习题:codevs  2822 爱在心中 解题报告
		
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
 - 习题:codevs 1035 火车停留解题报告
		
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
 - 习题: codevs 2492 上帝造题的七分钟2 解题报告
		
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
 - 习题:codevs 1519 过路费 解题报告
		
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
 - NOIP2016提高组解题报告
		
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
 - LeetCode 解题报告索引
		
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
 
随机推荐
- mininet安装过程记录
			
参考文档: http://www.brianlinkletter.com/set-up-mininet/ https://github.com/mininet/mininet/wiki/FAQ#x11 ...
 - c/c++ linux epoll系列2 利用epoll_wait查看是否可以送信
			
linux epoll系列2 利用epoll_wait查看是否可以送信 write函数本来是非阻塞函数,但是当缓存区被写满后,再往缓存区里写的时候,就必须等待缓存区再次变成可写,所以这是write就变 ...
 - 【Linux基础】iconv命令详解(编码转换)
			
对于给定文件把它的内容从一种编码转换成另一种编码. iconv -f GBK -t UTF- file1 -o file2 //将GBK转换为UTF8,输出到file2.没-o那么会输出到标准输出 i ...
 - js 获取输入框中光标的索引位置
			
<html> <head></head> <body> <script> function getTxt1CursorPosition(){ ...
 - HTML5仿手机微信聊天界面
			
HTML5仿手机微信聊天界面 这篇文章主要为大家详细介绍了HTML5仿手机微信聊天界面的关键代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 给大家带来的是HTML5仿手机微信聊天界面, ...
 - python3 Counter模块
			
from collections import Counter c = Counter("周周周周都方法及")print(c)print(type(c))print('__iter ...
 - Redis常用数据结构
			
Redis常用数据结构包括字符串(strings),列表(lists),哈希(hashes),集合(sets),有序集合(sorted sets). redis的key最大不能超过512M,可通过re ...
 - ksar、sar及相关内核知识点解析
			
关键词:sar.sadc.ksar./proc/stat./proc/cpuinfo./proc/meminfo./proc/diskstats. 在之前有简单介绍过sar/ksar,最近在使用中感觉 ...
 - Linux内存管理 (10)缺页中断处理
			
专题:Linux内存管理专题 关键词:数据异常.缺页中断.匿名页面.文件映射页面.写时复制页面.swap页面. malloc()和mmap()等内存分配函数,在分配时只是建立了进程虚拟地址空间,并没有 ...
 - 2、FreeRTOS任务相关API函数
			
1.任务相关的API函数 函数存在于task.c中,主要的函数有: xTaskCreate():使用动态的方法创建一个任务: xTaskCreatStatic():使用静态的方法创建一个任务(用的非常 ...