CDOJ 1324 (分块样例)
来源:互联网 发布:海口数据共享交换平台 编辑:程序博客网 时间:2024/04/30 18:49
简化题意:
单点更新某个值,区间查询最大值
分块:首先将序列分成
#include<cstring>#include<string>#include<iostream>#include<queue>#include<cstdio>#include<algorithm>#include<map>#include<cstdlib>#include<cmath>#include<vector>//#pragma comment(linker, "/STACK:1024000000,1024000000");using namespace std;#define INF 0x3f3f3f3f#define maxn 100005int n,q;int block,num,belong[maxn],l[maxn],r[maxn];long long val[maxn],mx[maxn];void init(){ block=sqrt(n); num=n/block; if(n%block) num++; for(int i=1;i<=n;i++) { belong[i]=(i-1)/block+1; } for(int i=1;i<=num;i++) { l[i]=(i-1)*block+1; r[i]=i*block; }}void update(int x,int add){ mx[belong[x]]=max(mx[belong[x]],val[x]+=add);}long long query(int x,int y){ long long ans=0; if(belong[x]==belong[y]) { for(int i=x;i<=y;i++) { ans=max(ans,val[i]); } return ans; } for(int i=x;i<l[belong[x]+1];i++) ans=max(val[i],ans); for(int i=l[belong[y]];i<=y;i++) ans=max(val[i],ans); for(int i=belong[x]+1;i<belong[y];i++) ans=max(mx[i],ans); return ans;}int main(){ scanf("%d%d",&n,&q); init(); for(int i=0;i<q;i++) { int op,l,r; scanf("%d%d%d",&op,&l,&r); if(op==1) update(l,r); else printf("%lld\n",query(l,r)); } return 0;}
0 0
- CDOJ 1324 (分块样例)
- CDOJ 1324 卿学姐与公主(分块)
- CDoj 1324<分块>
- CDOJ 1324 卿学姐与公主(分块)
- CDOJ 1324 卿学姐与公主 分块法
- CDOJ 1292 卿学姐种花(分块)
- CDOJ 1324 卿学姐与公主 (分块or线段树)
- CDOJ 1157 数列(seq) (分块)
- CDOJ 卿学姐与公主 【分块 入门题】
- CDOJ 1292 卿学姐种花(暴力,分块,线段树)
- CDOJ 1292 卿学姐种花 暴力 分块 线段树
- cdoj-1324-卿学姐与公主
- 1002CDOJ(解救小Q)
- cdoj 母仪天下(线段树)
- cdoj island(并查集)
- CDOJ-#149 解救小Q(BFS)
- CDOJ 203 Islands(并查集)
- CDOJ 1314 Hash Perfectly(FFT,计数)
- UVA 3708 Graveyard(思维)
- 第五周项目4-数制转换
- 利用动态代理模式来增强方法
- Chrome自带的开发者工具进阶技巧
- 【读书笔记】《Effective Java》(9)--并发
- CDOJ 1324 (分块样例)
- android性能优化----页面跳转优化
- angularJS学习笔记之——搭建学习环境
- 第五周星期四
- ClippingNode 用法
- JSP内置对象
- Google Protocol Buffer 的使用和原理
- 策略模式(Strategy)
- [环境搭建类] Windows环境下React Native环境配置详解!!!