传送门

题意

给出n个数和幸运数k,m次询问,每次询问[l1,r1]和[l2,r2]有多少对数满足x+y=k,x∈[l1,r1],y∈[l2,r2]

分析

看到m只有3e4,可以考虑\(m\sqrt{n}\)的莫队算法,具体讲解。首先设f(l,r)表示从l到r满足x+y=k的对数,那么由容斥定理得到,$$f(l1,r1,l2,r2)=f(l1,r2)-f(l1,l2-1)-f(r1+1,r2)+f(r1+1,l2-1)$$,那么就可以结合莫队算法离线求出询问结果,具体见代码

trick

代码

#include <bits/stdc++.h>
using namespace std; #define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
const int N = 30030;
int n,k,m,len,ans;
int a[N],cnt[N],res[N];//cnt[i]记录i出现的次数,res[i]代表第i次询问的结果
struct node
{
int l,r,id,block,f;
node(){}
node(int _l,int _r,int _id,int _f):l(_l),r(_r),id(_id),f(_f){block=l/len;}//左端点/块的大小
bool operator<(const node &p)const
{
return block==p.block?r<p.r:block<p.block;//左端点先排序,右端点后排序
}
}e[N<<2];
void insert(int loc)//插入,即向左/右扩展,先扩展后计算
{
if(k-a[loc]>=1&&k-a[loc]<=n) ans+=cnt[k-a[loc]];
cnt[a[loc]]++;
}
void erase(int loc)//删除,即向右/左收缩,先计算后收缩
{
cnt[a[loc]]--;
if(k-a[loc]>=1&&k-a[loc]<=n) ans-=cnt[k-a[loc]];
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
scanf("%d",&k);
F(i,1,n) scanf("%d",a+i);
scanf("%d",&m);
int l1,r1,l2,r2;
len=sqrt(n);//每块的大小
R(i,0,m)
{
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
e[i<<2]=node(l1,r2,i,1);
e[(i<<2)+1]=node(l1,l2-1,i,-1);
e[(i<<2)+2]=node(r1+1,r2,i,-1);
e[(i<<2)+3]=node(r1+1,l2-1,i,1);
}
sort(e,e+(m<<2));
ans=0;int l=1,r=0;
mem(res,0);mem(cnt,0);
//由第i个区间暴力求出第i+1个区间
for(int i=0;i<(m<<2);++i)
{
while(r<e[i].r) insert(++r);
while(l>e[i].l) insert(--l);
while(r>e[i].r) erase(r--);
while(l<e[i].l) erase(l++);
res[e[i].id]+=ans*e[i].f;
}
R(i,0,m) printf("%d\n",res[i]);
}
return 0;
}

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

  1. hdu_5213_Lucky(莫队算法+容斥定理)

    题目连接:hdu_5213_Lucky 题意:给你n个数,一个K,m个询问,每个询问有l1,r1,l2,r2两个区间,让你选取两个数x,y,x,y的位置为xi,yi,满足l1<=xi<=r ...

  2. [hdu5213]容斥原理+莫队算法

    题意:给一个序列a,以及K,有Q个询问,每个询问四个数,L,R,U,V, 求L<=i<=R,U<=j<=V,a[i]+a[j]=K的(i, j)对数(题目保证了L <= ...

  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. leetCode 65.Valid Number (有效数字)

    Valid Number  Validate if a given string is numeric. Some examples: "0" => true " ...

  2. gulp - sass 插件一直安装不好?

    1.没有sass,只存在与scss 任务 gulp.task('scss', function() { return gulp.src(app.srcPath + '/sass/*.scss') .p ...

  3. C语言printf()函数具体解释和安全隐患

    一.问题描写叙述 二.进一步说明 请细致注意看,有例如以下奇怪的现象 int a=5; floatx=a; //这里转换是没有问题的.%f打印x是 5.000000 printf("%d\n ...

  4. mysql (primary key)_(unique key)_(index) difference

    MYSQL  index  MYSQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找 ...

  5. C# Backgroundworker(后台线程)的使用

    namespace BackgroundWorkderPauseSample { public partial class MainForm : Form { BackgroundWorker wor ...

  6. XMLHTTPRequest DEMO(发送测试)

    对于其中的HTTP状态,我们知道200-299表明访问成功:300-399表明需要客户端 反应来满足请求:400-499和500-599表明客户端和服务器出错:其中常用的如404表示资源没找到,403 ...

  7. Spring Base

    1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书<Expert one-on-one J2EE Design and Deve ...

  8. 「翻译」Unity中的AssetBundle详解(一)

    AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...

  9. iOS开发中对于一些常用的相对路径(持续更新)

    1.iOS开发的证书的描述文件放置地点  ~/Library/MobileDevice/Provisioning Profiles 2.$(SRCROOT)代表的是这个项目文件夹所在的位置  $(PR ...

  10. Scrapy运行报错:ModuleNotFoundError: No module named 'douban.douban'

    运行scrapy爬虫报错: from douban.douban.items import DoubanItem ModuleNotFoundError: No module named 'douba ...