xdoj 1114(线段树离线处理)
貌似比在线快很多。
看大佬怎么离线的才学会离线的,注意a[i].f=1,0,2的顺序不能混,为什么写一组数据一看就知道了。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int sum[4*maxn],ans1[maxn],ans2[maxn];
struct node
{int l,r;
}t[4*maxn];
struct node2
{int l,r,p,v,f;
}a[4*maxn];
bool cmp(node2 x,node2 y)
{if(x.v==y.v)return x.f<y.f;else return x.v<y.v;
}
void build(int rt,int l,int r)
{t[rt].l=l;t[rt].r=r;if(t[rt].l==t[rt].r)return ;int mid=(l+r)>>1; build(rt<<1,l,mid);build(rt<<1|1,mid+1,r);
}
void pushup(int rt)
{sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void update(int p,int rt,int l,int r)
{if(l==r){sum[rt]++;return ;}int mid=(l+r)>>1;if(p>mid)update(p,rt<<1|1,mid+1,r);else update(p,rt<<1,l,mid); pushup(rt);
}
int query(int l,int r,int u)
{if(t[u].l>=l&&t[u].r<=r){ return sum[u]; }int mid=(t[u].l+t[u].r)/2;int res=0;if(mid>=l)res+=query(l,r,u<<1);if(r>mid) res+=query(l,r,u<<1|1); return res;
}
int main()
{int n,m;while(~scanf("%d %d",&n,&m)){build(1,1,n);for(int i=1;i<=n;i++){scanf("%d",&a[i].v);a[i].f=1;a[i].p=i;}int cnt=n;for(int i=1;i<=m;i++){int tmp=2*i-1;scanf("%d%d%d%d",&a[cnt+tmp].l,&a[cnt+tmp].r,&a[cnt+tmp].v,&a[cnt+tmp+1].v);a[cnt+tmp+1].l=a[cnt+tmp].l;a[cnt+tmp+1].r=a[cnt+tmp].r;a[cnt+tmp].f=0;a[cnt+1+tmp].f=2;a[cnt+tmp].p=a[cnt+tmp+1].p=i; }cnt+=2*m;sort(a+1,a+1+cnt,cmp);for(int i=1;i<=cnt;i++){if(a[i].f==1) update(a[i].p,1,1,n);else if(a[i].f==0) ans1[a[i].p]=query(a[i].l,a[i].r,1);else ans2[a[i].p]=query(a[i].l,a[i].r,1);}for(int i=1;i<=m;i++){printf("%d\n",ans2[i]-ans1[i]);}}}
xdoj 1114(线段树离线处理)相关推荐
- HDU - 4417 Super Mario(主席树/线段树+离线)
题目链接:点击查看 题目大意:给出由 n 个数的数列,再给出 m 次查询,每次查询需要输出 [ l , r ] 内小于等于 h 的数有多少个 题目分析:大晚上睡不着觉随便做做题,发现这个题目原来可以用 ...
- SPOJ - DQUERY D-query(莫队/线段树+离线/主席树)
题目链接:点击查看 题目大意:给出一个由n个数组成的序列,再给出m次查询,每次查询区间[l,r]中有多少个不同的数 题目分析:莫队模板题,直接套板子就好了 有点意思的是函数返回值为布尔类型,然后没有r ...
- Super Mario HDU - 4417(主席树解决区间数字小于k的个数||线段树+离线)
Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded in ...
- HDU 4417 Super Mario(线段树离线处理/主席树)
Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded in ...
- HDU - 3804 Query on a tree(树链剖分+线段树+离线处理)
题目链接:点击查看 题目大意:给出一棵树,每条边上都有一个权值,给出m个查询:a,b:问从点1到点a的唯一路径上,在边权小于等于b的边中选出边权最大的值输出,若没有符合条件的边则输出-1: 题目分析: ...
- HDU - 3333 Turing Tree(线段树+离线处理)
题目链接:点击查看 题目大意:给定一个长度为n的数列,依次求m个区间中不相同数字之和 题目分析:n给的是3e4,看到区间问题先要想到线段树或差分区间或动态规划,暴力是肯定不行滴,那么这个题已经知道是需 ...
- No Pain No Game HDU - 4630(gcd+线段树+离线处理)
Life is a game,and you lose it,so you suicide. But you can not kill yourself before you solve this p ...
- SPOJ GSS2 Can you answer these queries II (线段树离线) - xgtao -
Can you answer these queries II 这是一道线段树的题目,维护历史版本,给出N(<=100000)个数字(-100000<=x<=100000),要求求出 ...
- 【BZOJ2221】面试的考验,随机数列+线段树+离线
传送门 shallwe's blog //以上内容由shallwe本人暴力添加 思路: 好题 断断续续想了1周左右 暴力思路显然是O(n2logn)O(n^2\log n)的 我最开始的想法是用莫队+ ...
- HDU4417 线段树 + 离线处理
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 , 线段树(或树状数组) + 离线处理 最近看了几道线段树的题都是需要离线处理数据的,正好这块比 ...
最新文章
- std thread
- idea从mapper接口跳到xml文件
- BFS(广度优先搜索)
- 初识python之函数基础
- mysql怎么插入10w测试数据_mysql快速插入100万测试数据
- 信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶
- python实现文件重命名_基于python实现复制文件并重命名
- ASP.NET MVC 4 (二)控制器
- 鳄梨种植者使用传感器节省种植成本
- 从计算机复试看中国教育——一个面试官的经历
- C# 电子发票生成pdf
- 火狐浏览器设置深色主题
- ISO7816协议中psam卡片的延时单元etu
- 自动化测试金字塔与反模式
- macOS输入法导致系统卡住鼠标圈圈问题/风火轮
- HTML绘制齿轮,使用css3制作齿轮loading动画效果
- 如何查看手机计算机历史记录,怎么查看电脑历史操作记录
- 【Web技术】1008- coding优雅指南:函数式编程
- 老猿学5G扫盲贴:中国移动网络侧CHF主要功能及计费处理的主要过程
- 怎么利用NTFS文件权限打造安全u盘