nyoj119
来源:互联网 发布:mysql安装配置 编辑:程序博客网 时间:2024/04/27 13:40
南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。
所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀敌数最低的人之间军功差值是多少。
现在,请你写一个程序,帮小工回答南将军每次的询问吧。
注意,南将军可能询问很多次。
- 输入
- 只有一组测试数据
第一行是两个整数N,Q,其中N表示士兵的总数。Q表示南将军询问的次数。(1<N<=100000,1<Q<=1000000)
随后的一行有N个整数Vi(0<=Vi<100000000),分别表示每个人的杀敌数。
再之后的Q行,每行有两个正正数m,n,表示南将军询问的是第m号士兵到第n号士兵。 - 输出
- 对于每次询问,输出第m号士兵到第n号士兵之间所有士兵杀敌数的最大值与最小值的差。
- 样例输入
5 21 2 6 9 31 22 4
- 样例输出
17
#include <iostream>#include <cstdio>#define N 100001using namespace std;int num[N];struct tree{ int l,r; int mmax,mmin;}nod[N*4];void creat(int t, int l, int r){ nod[t].l = l, nod[t].r = r; if(l == r) // 叶子节点 { nod[t].mmax = num[l]; nod[t].mmin = num[l]; return; //递归出口 } int m = (l+r) / 2; creat(t*2, l, m), creat(t*2+1, m+1, r); // 左孩子 nod[t].mmax = max(nod[t*2].mmax, nod[t*2+1].mmax); // 右孩子 nod[t].mmin = min(nod[t*2].mmin, nod[t*2+1].mmin);}int query1(int t, int l, int r) // 查询t节点 在[l,r]区间范围的最大值{ if(l == nod[t].l && r == nod[t].r) return nod[t].mmax; int s; if(r <= nod[t*2].r) s = query1(t<<1, l, r); else if(l >= nod[t<<1|1].l) s= query1(t<<1|1, l, r); else s = max(query1(t<<1, l, nod[t<<1].r), query1(t<<1|1, nod[t<<1|1].l, r)); return s;}int query2(int t, int l, int r) // 查询t节点 在[l,r]区间范围的最大值{ if(l == nod[t].l && r == nod[t].r) return nod[t].mmin; int s; if(r <= nod[t*2].r) s = query2(t*2, l, r); else if(l >= nod[t<<1|1].l) s= query2(t<<1|1, l, r);else s = min(query2(t<<1,l,nod[t<<1].r), query2(t<<1|1, nod[t<<1|1].l, r));return s;}*/int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++) scanf("%d",&num[i]); int x,y; creat(1,1,n); while(m--) { scanf("%d%d",&x,&y); printf("%d\n",query1(1,x,y)-query2(1,x,y)); } } return 0;}
0 0
- nyoj119
- nyoj119
- RMQ nyoj119
- nyoj119士兵杀敌(三)
- nyoj119 RMQ问题
- NYOJ119 士兵杀敌(三)
- nyoj119(RMQ算法+线段树)
- nyoj119士兵杀敌(三)
- nyoj119士兵杀敌(三)
- nyoj119 士兵杀敌(三)
- 士兵杀敌(三)||NYOJ119
- NYOJ119 士兵杀敌(三)【线段树】
- NYOJ119 士兵杀敌(三) 线段树
- NYOJ119 士兵杀敌(三)(RMQ算法)
- nyoj119 士兵杀敌(三)RMQ算法
- 【nyoj119】士兵杀敌三(线段树)
- NYOJ119士兵杀敌(三)RMQ问题之ST…
- nyoj119 士兵杀敌(三) (线段树,两个value)
- 学习Java第一个类--Object
- 学习官方文档(photoLocations)
- uva 690 - Pipeline Scheduling(dfs+剪枝)
- UVaOJ_489 - Hangman Judge
- phonegap + xcode5.0.2 配置开发环境
- nyoj119
- 深入理解C++的动态绑定和静态绑定
- 关于惠普的增霸卡
- kaldi主页上的翻译的事情(更新)
- input文本框和验证码对齐问题解决
- 【嵌入式Linux驱动开发】三、字符设备驱动(二)
- NoSQL数据库的分布式算法
- 不断更新的连接。。。
- php+mysql分页类