UESTC 1324:卿学姐与公主(分块)
http://acm.uestc.edu.cn/#/problem/show/1324
题意:……
思路:卿学姐的学习分块例题。
分块是在线处理区间问题的类暴力算法,复杂度O(n*sqrt(n)),把给出的n个点的信息分成sqrt(n)个块,每个块有sqrt(n)个元素,然后去处理操作。
从块的左边扫到块的右边复杂度最多是O(sqrt(n)),然后扫过所有的块复杂度最多是O(sqrt(n))。
(画的好丑= =)
这个图一个一个区间代表一个块。比如这里我们要处理[L,R]的问题,那么从L扫到属于L的块的右边界复杂度最多O(sqrt(n)),从不属于L的块扫到不属于R的块最多sqrt(n)个块,因此复杂度最多O(sqrt(n)),再从属于R的块的左边界扫到R,复杂度也是最多O(sqrt(n)),因此,总的复杂度是O(sqrt(n))。
很美妙的处理啊。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100010
typedef long long LL; int sz, num, l[N], r[N], belong[N], n;
LL a[N], block[N]; void Build() {
sz = sqrt(n); // 每个块的大小
num = n / sz; if(n % sz) num++; // 块的数量,如果n有剩余,那么要分多一个块
for(int i = ; i <= num; i++)
l[i] = (i - ) * sz + , r[i] = i * sz; // 每个块在数组的[l, r]区间,即块的管辖范围
r[num] = n;
for(int i = ; i <= n; i++)
belong[i] = (i - ) / sz + ; // 第i个元素属于第belong[i]个块
} void Update(int id, int w) {
a[id] += w;
block[belong[id]] = max(block[belong[id]], a[id]);
} LL Query(int L, int R) {
LL ans = ;
if(belong[L] == belong[R]) // 如果属于同一个块,暴力扫,复杂度最大sqrt(n)
for(int i = L; i <= R; i++) ans = max(ans, a[i]);
else { // 如果不属于同一个块
for(int i = L; i <= r[belong[L]]; i++) ans = max(ans, a[i]); // 暴力把左边扫到左边的块的右边界
for(int i = belong[L] + ; i <= belong[R] - ; i++) ans = max(ans, block[i]); // 暴力扫不属于左边和右边的块
for(int i = l[belong[R]]; i <= R; i++) ans = max(ans, a[i]); // 暴力从属于右边的快的左边界扫到右边
}
return ans;
} int main() {
int q;
while(~scanf("%d%d", &n, &q)) {
memset(block, , sizeof(block));
memset(a, , sizeof(a));
Build();
while(q--) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if(a == ) Update(b, c);
else printf("%lld\n", Query(b, c));
}
}
return ;
}
UESTC 1324:卿学姐与公主(分块)的更多相关文章
- UESTC 1324 卿学姐与公主 分块板子
#include<iostream> #include<cmath> using namespace std; ; //表示当前数在哪一块里面 int belong[maxn] ...
- UESTC - 1324 卿学姐与公主
题目链接 某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏 在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中. 英勇的卿学姐拔出利刃冲向了拯救公主的道路. 走过了荒野,翻越了 ...
- CDOJ 1324 卿学姐与公主 分块
题目地址 分块模板 #include<cstdio> #include<algorithm> #include<math.h> using namespace st ...
- CDOJ 1324 卿学姐与公主(分块)
CDOJ 1324 卿学姐与公主(分块) 传送门: UESTC Online Judgehttp://acm.uestc.edu.cn/#/problem/show/1324 某日,百无聊赖的卿学姐打 ...
- cdoj 1324 卿学姐与公主 线段树裸题
卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- cdoj1324卿学姐与公主
地址:http://acm.uestc.edu.cn/#/problem/show/1324 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memo ...
- A - 卿学姐与公主(线段树+单点更新+区间极值)
A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- 卿学姐与公主 UESTC - 1324 分块模板题
题意:http://acm.uestc.edu.cn/#/problem/show/1324 中文题,自己看喽. 题解:分块模板,update时顺便更新块属性.ask时先判掉belong[l]==be ...
- CDOJ 1292 卿学姐种花 暴力 分块 线段树
卿学姐种花 题目连接: http://acm.uestc.edu.cn/#/problem/show/1292 Description 众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一 ...
随机推荐
- Alamofire - 优雅的处理 Swift 中的网络操作
网络处理,应该是我们平时开发的时候最常用到的操作.比如读取 JSON 数据,下载图片,这些操作都要和网络打交道,一个高效稳定的网络操作库对于提升我们日常的开发效率有着非常关键的作用.Alamofire ...
- WPF 页面切换效果
原文:WPF 页面切换效果 最近做一个有页面切换的吧.. 我觉得这个功能是比较基础的吧.. 在网上百度了一下.. 用NavigationWindow的比较好.. 因为Demo中是带了淡入淡出的页面效果 ...
- HierarchicalDataTemplate
针对具有分层数据结构的控件设计的,比如说TreeView,相当于可以每一个层级上做DataTemplate XmlDataProvider:数据源,写在Resources下 <XmlDataPr ...
- thinkphp5 phpexcel基本设置
//引入类 header('Content-type: text/html; charset=utf-8'); import('Org.Util.PHPExcel'); import('Org.Uti ...
- android studio 3.0+发布签名apk注意的情况
在build.gradle for module文件中添加 lintOptions { checkReleaseBuilds false abortOnError false } 这样避免失败
- 浅谈Android高通(Qualcomm)和联发科(MTK)平台
一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...
- 从零开始学习音视频编程技术(三) 开发环境搭建(Qt4.86手动设置环境,主要就是设置g++和qmake,比较透彻,附下载链接)
1.先下载安装Qt 我们使用的版本是4.8. 可以自行百度下载也可以从下面的网盘地址下载: Qt库和编译器下载: 链接:http://pan.baidu.com/s/1hrUxLIG 密码:0181 ...
- AndroidStudio下的依赖管理
在开发中用第三方库是很常见的事,如何在AndroidStudio下管理这些依赖呢?这就是这篇文章的目的. 目录 Maven/Ivy仓库依赖 Module依赖 aar文件依赖 jar文件依赖 例子完整代 ...
- 智能合约开发——以太坊 DApp 实现 购买通证token
合约的buy()方法用于提供购买股票的接口.注意关键字payable,有了它买股票的人才可以付钱给你. 接收钱没有比这个再简单的了! function buy() payable public ret ...
- JavaScript 数据实用程序库:Datalib
Datalib 是一个 JavaScript 数据实用程序库. 快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发M ...