题目连接:hdu_5213_Lucky

题意:给你n个数,一个K,m个询问,每个询问有l1,r1,l2,r2两个区间,让你选取两个数x,y,x,y的位置为xi,yi,满足l1<=xi<=r1,l2<=y2<=r2,使得x+y=K;

题解:首先,这题没有修改操作,即可以离线,离线区间问题就要想到莫队算法,然后看状态怎么搞,因为要求的答案满足区间的可加性,我们令f(l,r)表示 l到r这个区间满足条件的ans,令F(l1,r1,l2,r2)为在这两个区间内选取的数满足条件的ans,则根据容斥定理,F(l1,r1,l2,r2)=f(l1,r2)-f(r1+1,r2)-f(l1,l2-1)+f(r1+1,l2-1)。这里为什么不用靠左的区间来减1呢?因为当靠左的区间为1时,减1会到0的位置,所以不方便操作,这个公式可以在草稿上画一下线段区间图就了解了。然后就是莫队的操作了。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std; const int N=(int)3e4+;
int sqr,n,a[N],m,K,l1,r1,l2,r2,ans[N],cnt[N];
struct dt{
int l,r,id,f;
bool operator<(const dt &b)const{
if(l/sqr==b.l/sqr)return r<b.r;
else return l/sqr<b.l/sqr;
}
}q[N<<]; void modui(){
sqr=(int)sqrt(n+0.5);
sort(q,q+(m<<));
int an=,l=,r=;
F(i,,(m<<)-){
while(r<q[i].r){
r++;
if(K>a[r]&&K-a[r]<=n)an+=cnt[K-a[r]];
cnt[a[r]]++;
}
while(r>q[i].r){
cnt[a[r]]--;
if(K>a[r]&&K-a[r]<=n)an-=cnt[K-a[r]];
r--;
}
while(l<q[i].l){
cnt[a[l]]--;
if(K>a[l]&&K-a[l]<=n)an-=cnt[K-a[l]];
l++;
}
while(l>q[i].l){
l--;
if(K>a[l]&&K-a[l]<=n)an+=cnt[K-a[l]];
cnt[a[l]]++;
}
ans[q[i].id]+=an*q[i].f;
}
} int main(){
while(~scanf("%d",&n)){
scanf("%d",&K);
F(i,,n)scanf("%d",a+i),cnt[i]=;
scanf("%d",&m);
F(i,,m-){
scanf("%d%d%d%d",&l1,&r1,&l2,&r2),ans[i]=;
q[(i<<)].l=l1,q[(i<<)].r=r2,q[(i<<)].id=i,q[(i<<)].f=;
q[(i<<)+].l=l1,q[(i<<)+].r=l2-,q[(i<<)+].id=i,q[(i<<)+].f=-;
q[(i<<)+].l=r1+,q[(i<<)+].r=r2,q[(i<<)+].id=i,q[(i<<)+].f=-;
q[(i<<)+].l=r1+,q[(i<<)+].r=l2-,q[(i<<)+].id=i,q[(i<<)+].f=;
}
modui();
F(i,,m-)printf("%d\n",ans[i]);
}
return ;
}

hdu_5213_Lucky(莫队算法+容斥定理)的更多相关文章

  1. Lucky HDU - 5213 (莫队,容斥)

    WLD is always very lucky.His secret is a lucky number . is a fixed odd number. Now he meets a strang ...

  2. HDU5213(容斥定理+莫队算法)

    传送门 题意 给出n个数和幸运数k,m次询问,每次询问[l1,r1]和[l2,r2]有多少对数满足x+y=k,x∈[l1,r1],y∈[l2,r2] 分析 看到m只有3e4,可以考虑\(m\sqrt{ ...

  3. 51nod1284容斥定理

    1284 2 3 5 7的倍数 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题   给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 10, ...

  4. 【hdu4135】【hdu2841】【hdu1695】一类通过容斥定理求区间互质的方法

    [HDU4135]Co-prime 题意 给出三个整数N,A,B.问在区间[A,B]内,与N互质的数的个数.其中N<=10^9,A,B<=10^15. 分析 容斥定理的模板题.可以通过容斥 ...

  5. NBUT 1457 莫队算法 离散化

    Sona Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: Submit Status Practice NBUT 145 ...

  6. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  7. NPY and girls-HDU5145莫队算法

    Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  8. Codeforces617 E . XOR and Favorite Number(莫队算法)

    XOR and Favorite Number time limit per test: 4 seconds memory limit per test: 256 megabytes input: s ...

  9. Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色 ...

随机推荐

  1. 数据结构 B树 B+树 B*树 LSM-树

    从B树.B+树.B*树谈到R 树 http://blog.csdn.net/v_JULY_v/article/details/6530142/ B-tree.B+tree和LSM-tree http: ...

  2. install font

    哪些字体包含国际音标呢? 在微软的Windows与Office的2000或以上版本中分别带有Lucida Sans Unicode和Arial Unicode MS两种字体(以下分别简称LSU和AUM ...

  3. CVE-2014-1767 漏洞分析(2015.1)

    CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的doubl ...

  4. Objective-C 2.0属性(Property)介绍

    通常在声明一些成员变量时会看到如下声明方式: @property (参数1,参数2) 类型 名字: 这里我们主要分析在括号中放入的参数,主要有以下三种: setter/getter方法(assign/ ...

  5. 使用HttpClient工具类测试Http接口

    一.httpClient模拟客户端 import java.util.ArrayList;import java.util.Iterator;import java.util.List;import ...

  6. Codeforces Round #375 (Div. 2)A. The New Year: Mee

    A. The New Year: Meeting Friends time limit per test 1 second memory limit per test 256 megabytes in ...

  7. POJ 3419 Difference Is Beautiful

    先处理出每一个i位置向左最远能到达的位置L[i].每一次询问,要找到L,R区间中的p位置,p位置左边的L[i]都是小于L的,p位置开始,到R位置,L[i]都大于等于L,对于前者,最大值为p-L,后者求 ...

  8. iosNSMutableAttributedString 简单操作

    // 打印系统中所有字体的类型名字    NSArray *familyNames = [UIFont familyNames];    for(NSString *familyName in fam ...

  9. 在线协作沟通工具DesignBoard帮助设计团队更有效地进行沟通与版本管理

    设计稿呈现缺乏整体性.远程沟通效率低.多版本管理混乱,这可能是很多创业团队都面临的问题,并且这些问题都将直接影响到产品开发进度.国内创业团队彩程设计也曾面临同样的问题,后来他们在做某个新项目时尝试把设 ...

  10. CSS3秘笈:第五章

    第五章  层叠管理样式 1.层叠是决定哪些样式属性要被应用到某一个元素的一套规则. 2.最近的祖先样式胜出:浏览器会采用离相关标签最近的样式. 3.直接应用的样式胜出:任何直接应用于指定标签的样式都战 ...