wa自动机 的 莫队 刷题记录
洛谷P2709小B的询问
- 莫队裸题,模板题
- 莫队就是把询问区间排个序,先按左端点的Pos排序(POS是分块那个数组),pos一样的按右端点排序
- 代码:
#include <bits/stdc++.h>
#define nmax 50010 using namespace std;
int a[nmax],ta[nmax],cnt[nmax]={};
int n,m,qn,k;
struct que{
int l,r,p,id;
bool operator < (const que& x) const{ return (x.p==p)?(x.r>r):(x.p>p); }
}q[nmax]; int main(){
scanf("%d%d%d",&n,&qn,&k);
m=sqrt(n);
for (int i=; i<=n; i++) scanf("%d",&a[i]);
for (int i=; i<=qn; i++) {
scanf("%d%d",&q[i].l,&q[i].r);
q[i].p=(q[i].l-)/m;
q[i].id=i;
}
sort(q+,q+qn+);
int l=q[].l,r=q[].l-,ans=;
for (int i=; i<=qn; i++) {
while(l>q[i].l) l--,ans+=(*cnt[a[l]]+),cnt[a[l]]++;
while(r<q[i].r) r++,ans+=(*cnt[a[r]]+),cnt[a[r]]++;
while(l<q[i].l) ans-=(*cnt[a[l]]-),cnt[a[l]]--,l++;
while(r>q[i].r) ans-=(*cnt[a[r]]-),cnt[a[r]]--,r--;
ta[q[i].id]=ans;
}
for (int i=; i<=qn; i++) printf("%d\n",ta[i]);
return ;
}ヽ✿゜▽゜)ノ
BZOJ3289: Mato的文件管理
- 莫队加树状数组
- 每次区间长度增加的时候加上移动次数,减少的时候减去本来的移动次数(题意是只能移动相邻的嘛)
- 移动次数就是在当前区间的排名辣(因为要移动到那里去嘛,这个用树状数组很好维护。
- 没注意看题目,没有离散化re到死(果然人傻就是有各种各样的问题,嘤)
- 代码:
#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define nmax 50005 using namespace std;
typedef long long ll;
int n,q,bn; //bn为每块的大小
int data[nmax],c[nmax]={},lsh[nmax];
ll ans[nmax]={};
struct seg{
int l,r,pl,id;
bool operator < (const seg a) const{ return (a.pl==pl)?(a.r>r):(a.pl>pl); }
}qes[nmax]; void upd(int x,int y){ //y决定是加是减
while(x<=n) { c[x]+=y; x+=lowbit(x); }
} int myfind(int x){
int ans=;
while(x>) { ans+=c[x]; x-=lowbit(x); }
return ans;
} bool mycmp(int a,int b){ return data[a]<data[b]; } int main(){
cin>>n;
bn=sqrt(n);
for (int i=; i<=n; i++) { scanf("%d",&data[i]); lsh[i]=i; }
sort(lsh+,lsh+n+,mycmp);
for (int i=; i<=n; i++) data[ lsh[i] ]=i;
cin>>q;
for (int i=; i<=q; i++) {
scanf("%d%d",&qes[i].l,&qes[i].r);
qes[i].id=i;
qes[i].pl=(qes[i].l-)/bn+;
}
sort(qes+,qes+q+);
int l=qes[].l,r=qes[].l-,nowl=,ta=; //nowl现在该区间的长度
for (int i=; i<=q; i++) {
while(qes[i].l<l) l--,upd(data[l],),ta+=( myfind(data[l])- ),nowl++;
while(qes[i].r>r) nowl++,r++,upd(data[r],),ta+=( nowl-myfind(data[r]) );
while(qes[i].l>l) ta-=( myfind(data[l])- ),upd(data[l],-),nowl--,l++;
while(qes[i].r<r) ta-=( nowl-myfind(data[r]) ),upd(data[r],-),nowl--,r--;
ans[ qes[i].id ]=ta;
}
for (int i=; i<=q; i++) printf("%lld\n",ans[i]);
return ;
}(╯▔皿▔)╯
wa自动机 的 莫队 刷题记录的更多相关文章
- AC 自动机刷题记录
目录 简介 第一题 第二题 第三题 第四题 第五题 第六题 简介 这就是用来记录我对于<信息学奥赛一本通 · 提高篇>一书中的习题的刷题记录以及学习笔记. 一般分专题来写(全部写一起可能要 ...
- CODEFORCES 340 XOR and Favorite Number 莫队模板题
原来我直接学的是假的莫队 原题: Bob has a favorite number k and ai of length n. Now he asks you to answer m queries ...
- $2019$ 暑期刷题记录1:(算法竞赛DP练习)
$ 2019 $ 暑期刷题记录: $ POJ~1952~~BUY~LOW, BUY~LOWER: $ (复杂度优化) 题目大意:统计可重序列中最长上升子序列的方案数. 题目很直接的说明了所求为 $ L ...
- PE刷题记录
PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...
- [2009国家集训队]小Z的袜子(hose)(BZOJ2038+莫队入门题)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题目: 题意:中文题意,大家都懂. 思路:莫队入门题.不过由于要去概率,所以我们假 ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- 清橙A1206.小Z的袜子 && CF 86D(莫队两题)
清橙A1206.小Z的袜子 && CF 86D(莫队两题) 在网上看了一些别人写的关于莫队算法的介绍,我认为,莫队与其说是一种算法,不如说是一种思想,他通过先分块再排序来优化离线查询问 ...
- Leetcode刷题记录(python3)
Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...
- 刷题记录:[HarekazeCTF2019]encode_and_encode
目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...
随机推荐
- 10分钟快速搭建可用的springboot-web项目
搭建步骤 工具准备 1. IntelliJ IDEA(开发工具,简称idea) 2. JDK1.8+ 3. MAVEN 4. mysql(数据库) 5. redis(session储存) 创建步骤 S ...
- jQuery瀑布流插件masonry
项目要做荣誉证书的排版,宽度是统一的,但是高度不一致 采用瀑布流的效果来实现 默认先实现前15张,点击按钮再加载全部剩下的数据 效果图 首先是html部分,写好样式 <!-- 荣誉资质 --&g ...
- HA: Chakravyuh Vulnhub Walkthrough
靶机链接: https://www.vulnhub.com/entry/ha-chakravyuh,388/ 主机探测扫描: 端口扫描: ╰─ nmap -p- -sC -sV 10.10.202.1 ...
- maven导入sqlserver驱动jar包依赖包到本地仓库
maven导入sqlserver驱动jar包依赖包到本地仓库 maven项目使用sqlserver的依赖,先下载一个sqlserver的驱动,网址:https://www.microsoft.com/ ...
- 《自拍教程22》wget_文件下载工具
wget用途介绍 日常测试过程中,我们可以用wget命令,来下载一些资源文件. wget是一个很好文件下载命令, Linux操作系统下,自带wget命令. Windows操作系统下,需要自己去下载并配 ...
- javascript中如何使用js脚本模拟"request"获取url后参数值呢?
转自:猫猫小屋--js获取url后参数信息 摘要: 下文讲述javascript中使用js代码获取url地址后面的参数值的方法分享,如下所示: 实现思路: 使用正则表达式对参数值进行匹配,获取参数后的 ...
- Debian 10 xfce 错误提示 ACCESS DENIED
闲来无事重新安装自己的服务器发现很多关于Debian的初始安装问题都已经陌生了在此重新整理下自己安装所遇到的问题: ACCESS DENIED 释: 登录成功拒绝Root密码访问 解决方法: loc ...
- Ubuntu 系统连接到服务器
Ubuntu 系统连接到服务器 我用的是 Ubuntu18.04 系统 假设你的服务器上的用户名是 root, 域名或者 ip 地址是 xyz 而且配置好了安全组(阿里云的)和云解析 首先要安装 op ...
- 洛谷P1063能量项链(区间dp)
题目描述: 给定一串序列x[],其中的每一个Xi看作看作一颗珠子,每个珠子包含两个参数,head和tail,前一颗的tail值是后一个的head值,珠子呈现环形(是一条项链),所以最后一颗的tail是 ...
- CSS操作
CSS 与 JavaScript 是两个有着明确分工的领域,前者负责页面的视觉效果,后者负责与用户的行为互动.但是,它们毕竟同属网页开发的前端,因此不可避免有着交叉和互相配合. 1. 使用JavaSc ...