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_ ...
随机推荐
- 【渗透实战】web渗透实战,手动拿学校站点 得到上万人的信息(漏洞已提交)
------------恢复内容开始------------ ’‘’版权tanee转发交流学校请备注漏洞已经提交学校管理员关键过程的截图和脚本代码已经略去.希望大家学习技术和思路就好,切勿进行违法犯罪 ...
- pdf转图片(qq:2798641729)
前面已经把html转成pdf,但是用户可以下载图片格式的文件,所以我们必须把pdf转成图片格式,代码如下 package com.jit.platform.basics.util.pdf; impor ...
- [红日安全]Web安全Day1 - SQL注入实战攻防
本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...
- Android中点击按钮获取string.xml中内容并弹窗提示
场景 AndroidStudio跑起来第一个App时新手遇到的那些坑: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103797 ...
- 传智播客C++视频学习笔记(3)
#include<iostream> using namespace std; //内存分区模型 //代码区,存放二进制代码,由操作系统进行管理 //全局区,存放全局变量.静态变量.常量( ...
- mybatis 配置--->确认jar包是否正确
mybatis 配置之前,首先要确保服务器jar包是否成功 配置jar包如下添加mybaties-3.5.2. jar, maven 的 pom.xml 配置如下,查看配置是否成功见 如上分类 Mav ...
- Python基础之程序暂停
当我们执行某些程序时,由于机器速度很快导致肉眼无法直接看到执行结果时程序便停止运行.这时候我们迫切需要在程序中暂停,专业术语叫做阻塞.下面列举几种常用的程序暂停方法: input()用法:直接在欲等待 ...
- Elementui_day01,基础
Elementui_day01 1. 安装 npm i element-ui -S 2. 引入 import ElementUI from 'element-ui'; import 'element- ...
- 《自拍教程18》adb_Android设备debug连接工具
adb命令介绍 做Android App测试,Android手机系统测试, 还有很多Android终端产品(手表,车载,智能电视,智能手表等) 都必须用adb命令,通过USB接口,与Android设备 ...
- Qt文件发布
1.打开Qt文件夹下的,其他版本可能为Qt (版本号)for Desktop cmd 2.将Release文件下的exe文件复制到别的文件夹,我这里为G:\Qt\QT_project\ff 3.在Qt ...