[Ynoi2016] 掉进兔子洞

news/2024/9/17 20:40:21/文章来源:https://www.cnblogs.com/hzoi-Cu/p/18375678

题目链接 : [Ynoi2016] 掉进兔子洞

好不容易争取来的三天没有模拟赛,不打Ynoi打什么。

先从莫队+bitset的板板开始,第一个自己打出来的Ynoi捏。

一个套路,就是将每个数离散化后的值变成小于等于它的数的个数,然后就可以用bitset记录出现次数了。

具体的操作就是,假如一个数\(x\)出现了\(cnt_x\)次,那么它第\(cnt_x\)次在一个bitset的下标中就是\(x-cnt_x+1\),这个的正确性显然。

那么每次查询的答案就为\(\text{区间长度之和}-3\times\text{重复出现的数}\),求后面的就是3个bitset取&就可以了。

然后用莫队处理区间问题就没了。

但是要是开\(nm\)个bitset会寄,所以将询问分段处理即可。

点此查看代码
#include<bits/stdc++.h>
#include<bits/extc++.h>
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
using namespace std;
#define infile(x) freopen(x,"r",stdin)
#define outfile(x) freopen(x,"w",stdout)
#define errfile(x) freopen(x,"w",stderr)
#ifdef LOCALFILE *InFile = infile("in.in"),*OutFile = outfile("out.out");// FILE *ErrFile=errfile("err.err");
#elseFILE *Infile = stdin,*OutFile = stdout;//FILE *ErrFile = stderr;
#endif
using ll=long long;using ull=unsigned long long;
using db = double;using ldb = long double;
const int N = 1e5 + 10;
map<int,int> mp;
int n,a[N],m,ans[N],len,L[N],R[N],pos[N];
struct node{int l,r,id;}q[N];
int re[N];
bitset<N> pd[20010];
int cnt,que,num[N],ct[N];
inline void work(int m){int cnt = 0;memset(num,0,sizeof num);memset(ct,0,sizeof ct);for(int i = 1;i <= m; ++i){que++;cnt++;cin>>q[cnt].l>>q[cnt].r;q[cnt].id = i;num[i] += q[cnt].r - q[cnt].l + 1;cnt++;cin>>q[cnt].l>>q[cnt].r;q[cnt].id = i;num[i] += q[cnt].r - q[cnt].l + 1;cnt++;cin>>q[cnt].l>>q[cnt].r;q[cnt].id = i;num[i] += q[cnt].r - q[cnt].l + 1;re[i] = que;pd[i].set();}sort(q+1,q+1+cnt,[](node x,node y){return (pos[x.l] == pos[y.l]?(pos[x.l]&1?x.r<y.r:x.r>y.r):x.l<y.l);});bitset<N> vis;vis.reset();int left = 1,right = 0;auto add = [&](int x) -> void{vis.set(x - ct[x]);ct[x]++;};auto del = [&](int x) -> void{ct[x]--;vis.reset(x - ct[x]);};for(int i = 1;i <= cnt; ++i){int l = q[i].l,r = q[i].r;while(left > l) left--,add(a[left]);while(right < r) right++,add(a[right]);while(left < l) del(a[left]),left++;while(right > r) del(a[right]),right--;// cerr<<l<<' '<<r<<" :\n";// for(int j = 1;j <= 5; ++j) cerr<<vis[j];// cerr<<"\n\n";pd[q[i].id] &= vis;}for(int i = 1;i <= m; ++i){ans[re[i]] = num[i] - pd[i].count()*3;}
}
inline void solve(){cin>>n>>m;for(int i = 1;i <= n; ++i) cin>>a[i],mp[a[i]]++;len = sqrt(n);for(int i = 1;i <= len; ++i) L[i] = R[i - 1] + 1,R[i] = i * len;if(R[len] < n) len++,L[len] = R[len - 1] + 1,R[len] = n;for(int i = 1;i <= len; ++i) for(int j = L[i];j <= R[i]; ++j) pos[j] = i;int res = 0;for(auto &i:mp) i.second += res,res += i.second - res;for(int i = 1;i <= n; ++i) a[i] = mp[a[i]];// for(int i = 1;i <= n; ++i) cerr<<a[i]<<' ';// cerr<<'\n';int limit = 20000;res = m;while(true){if(m <= limit){work(m);break;}else work(limit),m -= limit;}for(int i = 1;i <= res; ++i) cout<<ans[i]<<'\n';
}
signed main(){cin.tie(nullptr)->sync_with_stdio(false);cout.tie(nullptr)->sync_with_stdio(false);solve();
}

upd : 速报,hangry已经肆意写FFT了,让我们一起膜拜他。

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/786012.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

还有程序员不会玩黑神话悟空?是我太菜了

我承认是我天真了,本来计划周二晚上公开直播新项目教学的,但是发现黑神话悟空这游戏的热度火的有点过头了啊!所以临时决定把新项目直播移到周四晚上 8 点。直播打游戏!大家好,我是程序员鱼皮。我承认是我天真了,本来计划周二晚上公开直播新项目教学的,但是发现黑神话悟空…

Git GUI与命令全能操作,转载

Git 命令基本操作 Git GUI全能基本操作 看 https://blog.csdn.net/chehec2010/article/details/89950964gui 目录 1、版本库初始化 gitpractise文件夹就变成了Git可以管理的仓库,目录下多了一个.git文件夹,此目录是Git用于管理版本库的,不要擅自改动里面的文件,这样会破坏…

spring boot简单运用ollama大模型(windows版本)

1、下载模型(windows为例)打开官方网站https://ollama.com/download/windows。打开exe文件,打开命令行工具,直接运行ollama run 要下载的模型(右上角的models能找到你想要的,例子以llama3.1展示,spring ai暂时非全支持,支持模型步骤2列出)运行完后直接是这样显示至此,…

048、Vue3+TypeScript基础,页面通讯之子页面调用父页面的事件

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vueconst app = createApp(App);// App.vue的根元素id为app app.mount(#app)02、App.vue代码如下:<template><div class="app&…

YOLOv5实战记录 Gradio搭建Web GUI

转自:https://blog.csdn.net/EmileJiao/article/details/137448176最终的:import torch import gradio as grmodel=torch.hub.load("./","custom",path="runs/train/exp2/weights/best.pt",source="local")title="基于Gradio的YO…

火山引擎VeDI实验平台助推企业量化决策能力升级

DataTester技术团队基于并行化的Leiden算法,快速处理亿级用户的复杂社交网络,完成基于社交圈的聚类分流。 更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 量化决策,正成为企业在数智化浪潮中掌握方向的必备之舵。通过“拍脑袋”式的…

基础组件:文本及样式

一、Text Text 用于显示简单样式文本,它包含一些控制文本显示样式的一些属性,一个简单的例子如下: Text("Hello world",textAlign: TextAlign.left, );Text("Hello world! Im Jack. "*4,maxLines: 1,overflow: TextOverflow.ellipsis, );Text("Hel…

设计模式[5]-代理模式

代码:https://gitee.com/Aes_yt/design-pattern代理模式 代理模式需要给某对象提供一个代理来访问该对象。是客户端和目标对象之间的一个媒介。 代理模式主要包括三种角色抽象主题:接口或抽象类,有着业务方法,可以让真实主题和代理对象来实现。 真实主题:实现了抽象主题的…

设计模式[2]-工厂模式

代码:https://gitee.com/Aes_yt/design-pattern工厂模式 1. 简单工厂模式 简单工厂模式主要包括三种角色:简单工厂 : 创建具体产品 抽象产品 : 具体产品的父类 具体产品 : 简单工厂创建的对象例子: 设计一个游戏机类(GameConsole) 作为抽象产品,然后设计具体的产品(Plan…

2021-12-29-md1

代码:https://gitee.com/Aes_yt/design-pattern代理模式 代理模式需要给某对象提供一个代理来访问该对象。是客户端和目标对象之间的一个媒介。 代理模式主要包括三种角色抽象主题:接口或抽象类,有着业务方法,可以让真实主题和代理对象来实现。 真实主题:实现了抽象主题的…

dubbo[3]_注解配置

本文介绍注解方式配置dubbo的例子。 服务提供Provider 1. 定义接口Animal和实现类CatAnimal: public interface Animal {/*** 描述: 返回动物的叫声*/String sound(); }Cat: package com.yt.provider;import com.alibaba.dubbo.config.annotation.Service;@Service(timeout = 5…

dubbo[2]_XML配置

本文介绍了zookeeper的下载安装以及用xml配置服务消费者和提供者的例子。 1. zookeeper下载安装 本文的例子使用zookeeper作为注册中心。 首先,从官网下载zookeeper,我选择的是Apache ZooKeeper 3.6.3版本。下载完成后,解压到自己的目录。https://zookeeper.apache.org/rele…