hdu 5213 容斥&& 莫队算法


问题描述

wld有n个数(a1...an)
保证对于任意1≤i≤n,1≤ai≤n
wld有一个常数k保证2≤k≤2∗n
为了消除歧义保证k为奇数
他有m个询问
每个询问有参数l1,r1,l2,r2
保证(1≤l1≤r1<l2≤r2≤n)
对于每个询问你需要回答有多少个二元组(i,j)满足:
l1≤i≤r1且l2≤j≤r2且ai+aj=k
保证1≤n≤30000,1≤m≤30000

输入描述

多组数据(最多5组)
对于每组数据:
第一行:一个数n表示数的个数
接下来一行:一个数k表示wld的常数
接下来一行:n个数,依次为a1,a2,…an
接下来一行:一个数m表示询问数
接下来m行:四个数l1,r1,l2,r2表示这组询问的参数

输出描述

对于每组数据:
对于每个询问输出二元组的数目

输入样例

5
3
1 2 1 2 3
1
1 2 3 5 

输出样例

2

Hint

a1 + a4 = 3
a2 + a3 = 3

//未解决。不知道为甚么错了。

参考https://vjudge.net/solution/5146082http://blog.csdn.net/qq_24451605/article/details/46411115

        #include<bits/stdc++.h>
using namespace std;
#define sf scanf
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a));
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define MP make_pair
#define ULL unsigned long long
#define LL   long long
#define inf 0x3f3f3f3f
#define md ((ll+rr)>>1)
#define ls (i<<1)
#define rs (ls|1)
#define eps 1e-8
#define ree freopen("in.txt","r",stdin);
#define bug pf("----------------");
#define N 30010
#define mod 475
#define double long double
#define  pii pair<int,int>
#define MP make_pair
#define lson ll,md,ls
#define rson md+1,rr,rs
#define pii pair<int,int>
#define B 180
//2017年09月08日14:37:08
//2017年09月08日14:56:51
//2017年09月08日15:14:54
struct Node{
    int l,r,id,v;
    void init(int _l,int _r,int _id,int _v){
        l=_l,r=_r,id=_id,v=_v;
    }
}node[N];
int pos[N];
int now;
bool cmp(Node a,Node b){
    if(pos[a.l]!=pos[b.l])return pos[a.l]<pos[b.l];
    return a.r<b.r;
}
int n,k,m;
int a[N];
int ans[N];
int tot[N];
void addit(int l,int r,int v){
    for(int i=l;i<=r;++i){
        if(k>a[i])now+=v*tot[k-a[i]];
        tot[a[i]]+=v;
    }
}
int main(){
    ree
    while(~sf("%d",&n)){
        sf("%d",&k);
        rep(i,1,n)sf("%d",&a[i]),pos[i]=(i-1)/B+1;
        mem(tot,0);
        sf("%d",&m);
        int cnt=0;now=0;
        rep(i,1,m){
            int l1,r1,l2,r2;
            sf("%d%d%d%d",&l1,&r1,&l2,&r2);
            node[++cnt].init(l1,r2,i,1);
            node[++cnt].init(l1,l2,i,-1);
            node[++cnt].init(r1,r2,i,-1);
            node[++cnt].init(r1,l2,i,1);
        }
        sort(node+1,node+1+cnt,cmp);
        for(int i=1,l=1,r=0;i<=cnt;++i){
            if(l<node[i].l)addit(l,node[i].l-1,-1);
            if(l>node[i].l)addit(node[i].l,l-1,1);
            if(r>node[i].r)addit(node[i].r+1,r,-1);
            if(r<node[i].r)addit(r+1,node[i].r,1);
            l=node[i].l;r=node[i].r;
            pf("%d\n",now);
            ans[node[i].id]+=node[i].v*now;
        }
        rep(i,1,m){
            pf("%d\n",ans[i]);
        }
    }
}
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值