当前位置: 首页 > news >正文

bzoj3809: Gty的二逼妹子序列

传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3809

思路:第一反应是莫队+树状数组,复杂度O(n^1.5*logn)

TLE。。。

于是就有了一个想法,分块维护美丽度,再套一个莫队。

这样莫队移动端点就是O(1)的,每次询问就是O(n^0.5)

然后就卡过了。。。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
const int maxn=100010,maxm=1000010;
using namespace std;char ch,str[20];
void read(int &x){
	for (ch=getchar();!isdigit(ch);ch=getchar());
	for (x=0;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
}
void print(int x){
	if (!x) putchar('0');
	int len;for (len=0;x;x/=10) str[++len]=x%10+'0';
	for (int i=len;i;i--) putchar(str[i]);
}

struct que{
	int l,r,a,b,id;
	void scan(int x){read(l),read(r),read(a),read(b),id=x;}
}q[maxm];
int n,m,a[maxn],sz,s[maxn],bel[maxn],l[maxn],r[maxn],res,bloans[maxn],ans[maxm];
bool cmp(que a,que b){return bel[a.l]==bel[b.l]?a.r<b.r:bel[a.l]<bel[b.l];}

int query(int x,int y){
	int tmp=0;
	if (bel[x]==bel[y]) for (int i=x;i<=y;i++) tmp+=s[i]>0;
	else{
		for (int i=x;i<=r[bel[x]];i++) tmp+=s[i]>0;
		for (int i=l[bel[y]];i<=y;i++) tmp+=s[i]>0;
	}
	for (int i=bel[x]+1;i<bel[y];i++) tmp+=bloans[i];
	return tmp;
}

void add(int x){if (++s[x]==1) bloans[bel[x]]++;}
void del(int x){if (--s[x]==0) bloans[bel[x]]--;}

void work(){
	for (int i=1,l=1,r=0;i<=m;i++){
		for (;r<q[i].r;r++) add(a[r+1]);
		for (;r>q[i].r;r--) del(a[r]);
		for (;l<q[i].l;l++) del(a[l]);
		for (;l>q[i].l;l--) add(a[l-1]);
		ans[q[i].id]=query(q[i].a,q[i].b);
	}
	for (int i=1;i<=m;i++) printf("%d\n",ans[i]);
}

int main(){
	//freopen("aa.in","r",stdin),freopen("aa.out","w",stdout);
	scanf("%d%d",&n,&m);sz=sqrt(n);
	for (int i=1;i<=n;i++) bel[i]=(i-1)/sz+1;
	for (int i=1;i<=n;i++){
		r[bel[i]]=i;
		if (!l[bel[i]]) l[bel[i]]=i;
	}
	for (int i=1;i<=n;i++) read(a[i]);
	for (int i=1;i<=m;i++) q[i].scan(i);
	sort(q+1,q+1+m,cmp),work();
	return 0;
}


转载于:https://www.cnblogs.com/thythy/p/5493540.html

相关文章:

  • linux内核page结构体的PG_referenced和PG_active标志
  • 解決BufferedReader读取UTF-8文件中文乱码(转)
  • 问题以及发现问题和解决问题
  • bitmap格式分析(转)
  • 关于数组或集合中判断存在某个元素
  • kexec机制
  • Spring事务配置的五种方式
  • buffer_head和bio
  • 关于人脸识别,稀疏表示的若干论文的小结
  • asp.net——正则表达式
  • 开始iOS 7中自动布局教程(一)
  • POJ 1470 Closest Common Ancestors
  • S3C2440-中文手册
  • URAL 1779 F - The Great Team 构造
  • 如何应用混沌进行置乱
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • ES6系列(二)变量的解构赋值
  • go语言学习初探(一)
  • JS+CSS实现数字滚动
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • log4j2输出到kafka
  • mysql 5.6 原生Online DDL解析
  • Shadow DOM 内部构造及如何构建独立组件
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • ------- 计算机网络基础
  • 力扣(LeetCode)357
  • 聊聊directory traversal attack
  • 前端临床手札——文件上传
  • 前嗅ForeSpider中数据浏览界面介绍
  • 算法-图和图算法
  • 运行时添加log4j2的appender
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • ​​​​​​​​​​​​​​Γ函数
  • ​用户画像从0到100的构建思路
  • #Linux(make工具和makefile文件以及makefile语法)
  • $jQuery 重写Alert样式方法
  • (03)光刻——半导体电路的绘制
  • (js)循环条件满足时终止循环
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (一)SpringBoot3---尚硅谷总结
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)(官方)UE4--图像编程----着色器开发
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .NET中winform传递参数至Url并获得返回值或文件
  • .net专家(高海东的专栏)
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • .考试倒计时43天!来提分啦!
  • @Data注解的作用
  • @Import注解详解