bzoj5016 一个简单的询问
这种不可直接做的问题
数据范围又很小
考虑莫队
但是,l1,l2,r1,r2四维?
考虑把询问二维差分!
f(a,b)表示,询问[1,a],[1, b]的答案
所以,ans(l1,r1,l2,y2)=f(r1,r2)-f(l1-1,r2)-f(r1,l2-1)+f(l1-1,l2-1)
正确性的话,考虑每一个种类k被统计的情况,c*d=(a+b)*(c+d)-a*(c+d)-c*(a+b)+a*b
需要离散化
数组开4倍
#include<bits/stdc++.h>
#define il inline
#define reg register int
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=+;
int n,m;
int a[N];
int blo[N];
int b[N];
ll ans[N];
struct que{
int l,r;
int c,id;
que(){}
que(int ll,int rr,int cc,int dd){
if(ll>rr) swap(ll,rr);
l=ll;r=rr;c=cc;id=dd;
}
bool friend operator <(que a,que b){
if(blo[a.l]==blo[b.l]){
if(blo[a.l]&) return a.r<b.r;
return a.r>b.r;
}
return blo[a.l]<blo[b.l];
}
}q[*N];
int tot;
int buc[][N];
ll now;
int l,r;
void dele(int d,int c){
now-=buc[d^][c];
buc[d][c]--;
}
void add(int d,int c){
now+=buc[d^][c];
buc[d][c]++;
}
void modui(){
l=;r=;now=;
for(reg i=;i<=tot;++i){
while(l<q[i].l) ++l,add(,a[l]);
while(l>q[i].l) dele(,a[l]),--l;
while(r<q[i].r) ++r,add(,a[r]);
while(r>q[i].r) dele(,a[r]),--r;
ans[q[i].id]+=(ll)now*q[i].c;
}
}
int main(){
rd(n);
for(reg i=;i<=n;++i){
rd(a[i]);
blo[i]=(i-)/+;
b[i]=a[i];
}
sort(b+,b+n+);
int cnt=unique(b+,b+n+)-b-;
for(reg i=;i<=n;++i){
a[i]=lower_bound(b+,b+cnt+,a[i])-b;
//cout<<" a[i] "<<a[i]<<endl;
}
rd(m);
int l1,l2,r1,r2;
for(reg i=;i<=m;++i){
rd(l1);rd(r1);rd(l2);rd(r2);
if(l1>&&l2>) q[++tot]=que(l1-,l2-,,i);
if(l1>) q[++tot]=que(l1-,r2,-,i);
if(l2>) q[++tot]=que(r1,l2-,-,i);
q[++tot]=que(r1,r2,,i);
}
sort(q+,q+tot+);
modui();
for(reg i=;i<=m;++i){
printf("%lld\n",ans[i]);
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/1/27 22:24:01
*/
询问的二维拆分有点意思!
以前并没有遇到这种问题(最多就是一维差分)
之前莫队都是(l,r)这种
如果可以前缀差分的话,那么多个(li,ri)都是可以的
本质就是容斥,或者高维差分
bzoj5016 一个简单的询问的更多相关文章
- 【BZOJ5016】[Snoi2017]一个简单的询问 莫队
[BZOJ5016][Snoi2017]一个简单的询问 Description 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计 ...
- [SNOI2017]一个简单的询问
[SNOI2017]一个简单的询问 题目大意: 给定一个长度为\(n(n\le50000)\)的序列\(A(1\le A_i\le n)\),定义\(\operatorname{get}(l,r,x) ...
- loj #2254. 「SNOI2017」一个简单的询问
#2254. 「SNOI2017」一个简单的询问 题目描述 给你一个长度为 NNN 的序列 aia_iai,1≤i≤N1\leq i\leq N1≤i≤N,和 qqq 组询问,每组询问读入 l1 ...
- 「SNOI2017」一个简单的询问
「SNOI2017」一个简单的询问 简单的解法 显然可以差分一下. \[get(l,r,x)\times get(l1,r1,x)=get(1,r,x) \times get(1,r1,x)-get( ...
- bzoj P5016[Snoi2017]一个简单的询问——solution
Description 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. Input ...
- [bzoj5016][Snoi2017]一个简单的询问
来自FallDream的博客,未经允许,请勿转载,谢谢. 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中 ...
- Gym101138D Strange Queries/BZOJ5016 SNOI2017 一个简单的询问 莫队、前缀和、容斥
传送门--Gym 传送门--BZOJ THUWC2019D1T1撞题可还行 以前有些人做过还问过我,但是我没有珍惜,直到进入考场才追悔莫及-- 设\(que_{i,j}\)表示询问\((1,i,1,j ...
- BZOJ5016:[SNOI2017]一个简单的询问(莫队)
Description 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. Input 第 ...
- 【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
题目描述 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. 输入 第一行,一个数字N,表 ...
随机推荐
- 【深度学习的实用层面】(一)训练,验证,测试集(Train/Dev/Test sets)
在配置训练.验证.和测试数据集的过程中做出正确的决策会更好地创建高效的神经网络,所以需要对这三个名词有一个清晰的认识. 训练集:用来训练模型 验证集:用于调整模型的超参数,验证不同算法,检验哪种算法更 ...
- linux命令系列 stat & touch
1. stat - display file or file system status stat命令主要用于显示文件或文件系统的状态,详细信息 事实上,stat命令显示的是文件的I节点信息.Linu ...
- Final发布中间产物
目录 ❶版本控制 ❷软件功能说明书 ❸WBS ❹PSP 一.版本控制 ①Git地址:https://git.coding.net/tianjiping/Android-tianjiping.git ② ...
- No.1001_第六次团队会议
黯淡的一日 今天发生了很令人不爽的一件事,杜正远又被叫去实验室了.昨天界面就很难做,而且我们组人手稀缺,他的缺席让我很难做下去. 今天开会我自己没做出什么来,就加了一个群组的添加功能,同样,曾哲昊也没 ...
- 团队C++作业1
我的分工 在本次作业中,我负责的是建筑类的完成还有调试运行. 建筑类的完成: 首先我认为建筑类的完成中,建筑类中应该有三个成员,水晶,防御塔,泉水. 水晶在这个里头是要被保护的对象,它的功能有回血还有 ...
- arcgis 10.3中文版安装教程、配置及常见问题(百度的有些错误)
参考的: 1.http://wenku.baidu.com/link?url=W-wo_lEMvzHxF19w91X7H0WDjyCQ16DjGu4ViaZ4-eVPr0NTU-LrZTPK1oyzT ...
- android 的helloworld没跑起来 原因
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com. ...
- HDU 4026 Unlock the Cell Phone 状压dp(类似TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4026 Unlock the Cell Phone Time Limit: 6000/3000 MS ...
- WCF 和 ASP.NET Web API
地址:https://docs.microsoft.com/zh-cn/dotnet/framework/wcf/wcf-and-aspnet-web-api WCF 是 Microsoft 为生成面 ...
- 深入理解JAVA集合系列二:ConcurrentHashMap源码解读
HashMap和Hashtable的区别 在正式开始这篇文章的主题之前,我们先来比较下HashMap和Hashtable之间的差异点: 1.Hashtable是线程安全的,它对外提供的所有方法都是都使 ...