hdu 5213 容斥&& 莫队算法
2017-09-08 16:39
330 查看
问题描述 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/5146082和http://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 ; int pos ; 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 ; int ans ; int tot ; 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]); } } }
相关文章推荐
- hdu 5213 Lucky && 莫队算法的理解
- hdu 5145 NPY and girls && 莫队算法 && 逆元处理
- HDU 5381 The sum of gcd (技巧,莫队算法)
- hdu 5381 The sum of gcd 原来有个算法叫莫队 2015 Multi-University Training Contest 8
- HDU 1025.Constructing Roads In JGShining's Kingdom【最长上升子序列n×logn算法】【1月6】
- HDU 4004 The Frog's Games(基本算法-贪心,搜索-二分)
- LOJ2254 && bzoj5016 [Snoi2017]一个简单的询问 莫队算法
- Lucky - HDU 5213 莫队算法
- HDU 4638 莫队算法
- HDU 4185 Oil Skimming && 匈牙利算法
- hdu 4638 Group(莫队算法)
- hdu 5381 2015多校第八场 莫队算法
- HDU 4638 Group(莫队算法)
- HDU 4513 吉哥系列故事——完美队形II(Manacher算法最大回文长度 && 两侧沿中点递减)
- HDU 5145 NPY and girls 莫队算法
- 算法总结:【线段树+扫描线】&矩形覆盖求面积/周长问题(HDU 1542/HDU 1828)
- 算法模板之巴什博弈(HDU 1846 Brave Game &amp; HDU 2149 Public Sale)
- HDU 1806(Frequent values)莫队算法
- 2014西安全国邀请赛 1003 && HDU 4849 Wow! Such City! (单源最短路Djikstra算法)
- [BZOJ2038][2009国家集训队]小Z的袜子(hose) && 莫队算法