http://acm.uestc.edu.cn/#/problem/show/1324

思路:基础分块,这个是一个特别简单的分块,就当做是一个练习了。然后这题也是很简单的单点线段树更新。

//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker,"/STACK:102400000,102400000")
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
const int maxn = 1e5 + ;
///block表示块的大小,num表示一共分成多少个块
///belong表示这个数在哪个块里面,l和r表示左右边界
/*
查询操作的话,如果x和y是在同一个块里面,就暴力。
如果不是在一个块里面的话,先暴力[x, r[belong[x]]],然后再暴力块
然后再暴力[l[belong[y]], y]
*/
int block, num, l[maxn], r[maxn], belong[maxn], n, q;
LL Max[maxn], a[maxn]; void build(){
block = sqrt(n); num = n / block;
if (n % block) num++;
for (int i = ; i <= num; i++)
l[i] = (i - ) * block + , r[i] = i * block;
r[num] = n;
for (int i = ; i <= n; i++){
belong[i] = (i - ) / block + ;
}
} void update(int x, int y){
a[x] += y * 1LL;
Max[belong[x]] = max(Max[belong[x]], a[x]);
} int query(int x, int y){
LL ans = ;
if (belong[x] == belong[y]){
for (int i = x; i <= y; i++)
ans = max(ans, a[i]);
return ans;
}
for (int i = x; i <= r[belong[x]]; i++){
ans = max(ans, a[i]);
}
for (int i = belong[x] + ; i <= belong[y] - ; i++)
ans = max(ans, Max[i]);
for (int i = l[belong[y]]; i <= y; i++)
ans = max(ans, a[i]);
return ans;
} int main(){
cin >> n >> q;
build();
for (int i = ; i <= q; i++){
int op, x, y;
scanf("%d%d%d", &op, &x, &y);
if (op == ) update(x, y);
else printf("%d\n", query(x, y));
}
return ;
}

最新文章

  1. iOS UIScrollView的使用
  2. 重新想象 Windows 8.1 Store Apps (75) - 新增控件: Hub, Hyperlink
  3. 使用SQLServer Profiler侦测死锁(转)
  4. (转载)在mysql中,column &#39;id&#39; in field list is ambiguous
  5. 如果在文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖
  6. lua中打印所以类型功能实现table嵌套table
  7. Windows phone 8 学习笔记(7) 设备
  8. 安装Windows Azure Powershell
  9. kafka学习笔记1:测试环境搭建
  10. linux 内核提权
  11. Spring:容器基本用法
  12. Spring.Net 简单实例-02(属性注入)
  13. python爬取今日头条关键字图集
  14. springBoot基础2
  15. day_5.5 单例
  16. 题解——UVA11997 K Smallest Sums
  17. redis 和 kookeeper 连用 构建 redis集群
  18. 判断两个vector是否相等
  19. angualrJs指令起名的bug
  20. Javascript的V8引擎研究

热门文章

  1. C++:默认初始化
  2. Linux 下web开发环境搭建-jdk环境搭建
  3. LNMP环境+ 前后端项目部署+redis+redis扩展
  4. 软工1816 &#183; Alpha冲刺(8/10)
  5. 404 Note Found&#183; 第七次作业 - 需求分析报告
  6. Ubuntu命令行安装显卡驱动
  7. Learn Docker(一)—软件安装与常规操作
  8. 第三章 ServerSpcket用法详解
  9. winform 弹出窗体指定位置
  10. React.js + LiveReload配置详解