博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bzoj3809--Gty的二逼妹子序列
阅读量:5239 次
发布时间:2019-06-14

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

一开始想到是树套树,空间28m树套树就狗带了

这题可以用莫队去做,如果在莫队下跑的是树状数组或者线段树的话复杂度要多带个log,可能跑不过

所以换成是分块。为什么分块,因为分块可以o(1)修改。

这里分块是针对值域来分而不是下标,外面套个莫队时间复杂度m*sqrt(n)+n*sqrt(n)

代码:

#include
using namespace std;#define MAXN 100005#define MAXM 1000006int ret;char c;inline int read() { ret=0;c=getchar(); while(c>'9'||c<'0') c=getchar(); while(c<='9'&&c>='0') ret=ret*10+c-'0',c=getchar(); return ret;}int s[MAXN],ans[MAXM],n,m,qsz;struct que{ int l,r,a,b,id;}q[MAXM];int bl[MAXN],cnt[MAXN],blk[MAXN];bool cmp(que a,que b) {
return bl[a.l]==bl[b.l]?a.r
=l;i--) ret+=(bool)cnt[i]; for(int i=bl[r]*qsz;i<=r;i++) ret+=(bool)cnt[i]; return ret;}int main() { n=read();m=read(); qsz=(int)sqrt(n); for(int i=1;i<=n;i++) s[i]=read(); for(int i=1;i<=n;i++) bl[i]=i/qsz; for(int i=1;i<=m;i++) { q[i].l=read();q[i].r=read(); q[i].a=read();q[i].b=read(); q[i].id=i; } sort(q+1,q+m+1,cmp); int l=1,r=0; for(int i=1;i<=m;i++) { while(r
q[i].l) Up(s[--l]); while(r>q[i].r) Down(s[r--]); while(l

 

转载于:https://www.cnblogs.com/ihopenot/p/5968752.html

你可能感兴趣的文章
疯狂JAVA16课之对象与内存控制
查看>>
django ORM创建数据库方法
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
口胡:[HNOI2011]数学作业
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
03 线程池
查看>>
手机验证码执行流程
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
初识lua
查看>>
jquery的contains方法
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>
桥接模式-Bridge(Java实现)
查看>>
Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
查看>>
Mac下使用crontab来实现定时任务
查看>>
303. Range Sum Query - Immutable
查看>>