Woj 1551 - E - Pairs
2014-04-15 19:47
218 查看
题目链接
n个数,m个查询,每次查询[L, R]之间满足 abs (a[i] - a[j] ) <=2 ,i<j的对数。
很明显,对于a[i],能影响答案的只有a[i],a[i]-1,a[i]-2,a[i]+1,a[i]+2, 和小Z的袜子蛮像的,离线操作,对于区间于区间之间进行暴力转移,把[l,r]看成平面上的点,那么用曼哈顿距离表示两个区间的暴力转移复杂度,所以需要按照曼哈顿距离来对查询排序。
这篇博客 介绍了,可以用分块代替曼哈顿距离最小生成树..
n个数,m个查询,每次查询[L, R]之间满足 abs (a[i] - a[j] ) <=2 ,i<j的对数。
很明显,对于a[i],能影响答案的只有a[i],a[i]-1,a[i]-2,a[i]+1,a[i]+2, 和小Z的袜子蛮像的,离线操作,对于区间于区间之间进行暴力转移,把[l,r]看成平面上的点,那么用曼哈顿距离表示两个区间的暴力转移复杂度,所以需要按照曼哈顿距离来对查询排序。
这篇博客 介绍了,可以用分块代替曼哈顿距离最小生成树..
#include <stdio.h> #include <math.h> #include <string.h> #include <algorithm> using namespace std; inline int input(){ int ret=0;bool isN=0;char c=getchar(); while(c<'0' || c>'9') { if(c=='-') isN=1; c=getchar(); } while(c>='0' && c<='9'){ ret=ret*10+c-'0';c=getchar(); } return isN?-ret:ret; } #define N 100005 #define clr(a) memset(a,0,sizeof(a)) typedef long long ll; int S,n,m,pos ,a ,l,r; ll ans ; ll s ,tmp; struct Query{ int l,r,id; }q ; bool cmp(Query i,Query j){ return pos[i.l] < pos[j.l] || (pos[i.l]==pos[j.l] && i.r<j.r); } inline void add(int p,int val){ p=a[p];if(val<0) s[p]--; ll pp=s[p]+s[p+1]+s[p+2]+(p>=2?s[p-2]:0)+(p>=1?s[p-1]:0); pp*=val; tmp += pp; if(val>0) s[p]++; } int ca; int main(){ ca=1; while(~scanf("%d",&n)){ m=input(); S=(int)(sqrt(n+0.5)); for(int i=1;i<=n;i++) pos[i]=(i-1)/S+1; for(int i=1;i<=n;i++) a[i]=input(); for(int i=1;i<=m;i++){ q[i].l=input(),q[i].r=input(),q[i].id=i; } sort(q+1,q+m+1,cmp); clr(s),tmp=0,l=1,r=0; for(int i=1;i<=m;i++){ if(r < q[i].r){ for(r=r+1;r<=q[i].r;r++) add(r,1); r--; } if(r > q[i].r){ for(;r>q[i].r;r--) add(r,-1); } if(l < q[i].l){ for(;l<q[i].l;l++) add(l,-1); } else if(l > q[i].l){ for(l=l-1;l>=q[i].l;l--) add(l,1); l++; } if(q[i].l==q[i].r){ ans[q[i].id]=0; } else{ int id=q[i].id; ans[id]=tmp; } } printf("Case %d:\n",ca++); for(int i=1;i<=m;i++) printf("%lld\n",ans[i]); } return 0; }
相关文章推荐
- zoj 3781 Paint the Grid Reloaded
- svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
- hdoj 2653 Waiting ten thousand years for Love(优先队列+BFS)
- HDU1867 A + B for you again
- 关于MYSQL:Got error 134 from storage engine/is marked as crashed and should be repaired
- ZOJ 3780 Paint the Grid Again (模拟)
- 使用sendmail发邮件
- 连接池中的maxIdle,MaxActive,maxWait参数
- Rails4升级小记
- Container With Most Water
- 磁盘存储:RAID 0、RAID 1、RAID 5、RAID 10
- 错误:error LNK1123: failure during conversion to COFF: file invalid or corrupt
- 同步中,为什么要wait,又notify谁?
- 利用wait notify 实现线程互斥通知
- [转载] OpenAIS集群分析
- TaintDroid源码下载
- 另类DLL加载方法 —— PEAnalyais
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(四)
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(三)
- TaintDroid:智能手机监控实时隐私信息流跟踪系统(二)