【线段树】 HDOJ 4630 No Pain No Game
来源:互联网 发布:辣条什么意思网络用语 编辑:程序博客网 时间:2024/05/03 03:43
离线处理, 把询问按左区间端点从大到小排序,然后点按从大到小的顺序插入这个数的约数。。。
#include <iostream> #include <queue> #include <stack> #include <map> #include <set> #include <bitset> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib>#include <cmath>#include <time.h>#define maxn 50005#define maxm 100005#define eps 1e-10#define mod 3#define INF 1e17#define lowbit(x) (x&(-x)) #define ls o<<1#define rs o<<1 | 1#define lson o<<1, L, mid #define rson o<<1 | 1, mid+1, R typedef long long LL;//typedef int LL;using namespace std;struct node{ int a, b; int id, ans;}op[maxn];int num[maxn];int pre[maxn];int value[maxn];int maxv[maxn<<2];int n, m, ql, qr, p, v;int cmp(node a, node b){ return a.a < b.a;}int cmp2(node a, node b){ return a.id < b.id;}void init(void){ memset(maxv, 0, sizeof maxv); memset(value, 0, sizeof value); for(int i = 1; i <= n; i++) pre[i] = n+1;}void read(void){ scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", &num[i]); scanf("%d", &m); for(int i = 1; i <= m; i++) scanf("%d%d", &op[i].a, &op[i].b), op[i].id = i;}void pushup(int o){ maxv[o] = max(maxv[ls], maxv[rs]);}void updata(int o, int L, int R){ if(L == R) { maxv[o] = v; return; } int mid = (L+R)>>1; if(p <= mid) updata(lson); else updata(rson); pushup(o);}int query(int o, int L, int R){ if(ql <= L && qr >= R) return maxv[o]; int mid = (L+R)>>1, ans = 0; if(ql <= mid) ans = max(ans, query(lson)); if(qr > mid) ans = max(ans, query(rson)); return ans;}void debug(void){ for(int i = 1; i <= m; i++) printf("AAA %d %d BB\n", op[i].a, op[i].b);}void work(void){ int pp = m, tmp; sort(op+1, op+m+1, cmp); for(int i = n; i >= 1; i--) { tmp = sqrt(num[i]); for(int j = 1; j <= tmp; j++) { if(num[i]%j == 0) { p = pre[j], pre[j] = i, v = j; if(p <= n && value[p] < v) value[p] = v, updata(1, 1, n); if(num[i]/j == j) continue; p = pre[num[i]/j], pre[num[i]/j] = i, v = num[i]/j; if(p <= n && value[p] < v) value[p] = v, updata(1, 1, n); } } while(pp && op[pp].a == i) { ql = 1, qr = op[pp].b; op[pp--].ans = query(1, 1, n); } } sort(op+1, op+m+1, cmp2); for(int i = 1; i <= m; i++) printf("%d\n", op[i].ans);}int main(void){ int _; while(scanf("%d", &_)!=EOF) { while(_--) { read(); init(); work(); } } return 0;}
0 0
- 【线段树】 HDOJ 4630 No Pain No Game
- HDOJ 4630 No Pain No Game
- HDU4630:No Pain No Game(线段树)
- hdu 4630 No Pain No Game 线段树 树状数组
- HDU 4630 No Pain No Game 离线+线段树
- hdu 4630 No Pain No Game(线段树+离线操作)
- HDU 4630 No Pain No Game (线段树离线查询)
- HDU - 4630 No Pain No Game (线段树 + 离线处理)
- hdu 4630 No Pain No Game【线段树 离线操作】
- hdu 4630 No Pain No Game(线段树)
- hdu4630 No Pain No Game(离线 线段树)
- 2013 多校第三场 hdu 4630 No Pain No Game(线段树)
- hdu 4630 No Pain No Game (区间gcd相关x线段树or树状数组)
- HDU 4630 No Pain No Game(线段树离线处理)
- hdu 4630 No Pain No Game
- HDU 4630 No Pain No Game
- HDU 4630 No Pain No Game
- hdu 4630 No Pain No Game
- 重构个人版机房收费(二)——泛型集合
- 今年暑假数学建模让我们一起加油↖(^ω^)↗
- myeclise10 svn: E210004: Number is larger than maximum 解决方案
- 2014-08-07 日志
- C++设计模式之原型模式(二)
- 【线段树】 HDOJ 4630 No Pain No Game
- java 面向对象的多态性
- 《深度探索c++对象模型》总结
- POJ 3461 Oulipo (KMP)
- 沙盒路径
- java反射机制详解<转>
- 20140807面试
- LSHKIT库源码编译
- 【编程好习惯】精确包含头文件