博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷2184 贪婪大陆(树状数组)
阅读量:5009 次
发布时间:2019-06-12

本文共 917 字,大约阅读时间需要 3 分钟。

【题目分析】

考虑每次是在区间[l,r]中埋一种,所以记录每次的左右端点,查询一段区间[l,r]就是统计1~r中埋了多少雷,再减去1~l-1中埋完的雷(即右端点)即可。

所以用两个树状数组维护左右端点信息即可。(常数比线段树要小)

【代码~】

#include
using namespace std;const int MAXN=1e6+10;const int MOD=1e6;int n,q;int tr1[MAXN],tr2[MAXN];int Read(){ int i=0,f=1; char c; for(c=getchar();(c>'9'||c<'0')&&c!='-';c=getchar()); if(c=='-') f=-1,c=getchar(); for(;c>='0'&&c<='9';c=getchar()) i=(i<<3)+(i<<1)+c-'0'; return i*f;}int lowbit(int x){ return x&(-x);}void update(int x,int y,int v){ for(int i=x;i<=n;i+=lowbit(i)) tr1[i]+=v; for(int i=y;i<=n;i+=lowbit(i)) tr2[i]+=v;}int query(int x,int y){ int ret=0; for(int i=y;i;i-=lowbit(i)) ret+=tr1[i]; for(int i=x;i;i-=lowbit(i)) ret-=tr2[i]; return ret;}int main(){ n=Read(),q=Read(); while(q--){ int cz=Read(),l=Read(),r=Read(); if(cz==1) update(l,r,1); else printf("%d\n",query(l-1,r)); } return 0;}

 

转载于:https://www.cnblogs.com/Ishtar/p/10010744.html

你可能感兴趣的文章
webview与壳交互的几种方式
查看>>
python3对于时间的处理
查看>>
数据库多对多关联表(Python&MySQL)
查看>>
[实变函数]1.2 集合的运算
查看>>
第06天
查看>>
设计模式的征途—5.原型(Prototype)模式
查看>>
asp.net上传功能(单文件,多文件,自定义生成缩略图,水印)
查看>>
bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录
查看>>
云计算设计模式(八)——外部配置存储模式
查看>>
C++ Primer 有感(复制控制)
查看>>
[转]深入理解闭包(一)
查看>>
经典SQL语句大全(绝对的经典)
查看>>
设计者使用最多的前20专门设计LOGO的免费字体
查看>>
TCP三次握手、四次握手
查看>>
认识System,System32,Syswow64
查看>>
Jmeter如何把CSV文件的路径设置成一个变量,且变量的值是一个相对路径
查看>>
免费的自动构建CI
查看>>
iOS10 app连接不上网络的问题
查看>>
结对开发之电梯调度最终稿(徐梦迪&刘博)
查看>>
simple java mail
查看>>