刚开始看这个题目,觉得没法做。关键点是数据小于100。因此,可以枚举所有小于100的素因子进行位压缩。
gcd就是求最小值,lcm就是求最大值。c++有时候超时,g++800ms。线段树可解。

 /* 3071 */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1
#define ui32 unsigned int typedef struct {
ui32 mx, mn;
} node_t; int factor[] = {,,,,,,,,,,,,,,,,,,,,,,,,};
int width[] = {,,,,,,,,,,,,,,,,,,,,,,,,};
int shift[] = {,,,,,,,,,,,,,,, , , , , , , , , , };
int mask[] = {,,,,,,,,,,,,,,,,,,,,,,,,};
const int maxn = 1e5+;
int M[][];
node_t nd[maxn<<];
int L, R, mod; void init() {
rep(i, , ) {
M[i][] = ;
rep(j, , mask[i]+)
M[i][j] = M[i][j-] * factor[i];
}
} int getVal(int x) {
int ret = , tmp; for (int i=; i>=; --i) {
tmp = M[i][x&mask[i]];
ret = ret * tmp % mod;
x >>= width[i];
} return ret;
} ui32 calc(int x) {
ui32 ret = , tmp; rep(i, , ) {
ret <<= width[i];
tmp = ;
if (x%factor[i] == ) {
while (x%factor[i] == ) {
++tmp;
x /= factor[i];
}
}
ret += tmp;
} return ret;
} ui32 mymax(ui32 x, ui32 y) {
ui32 ret = max(x&0x70000000, y&0x70000000)\
| max(x&0x0e000000, y&0x0e000000)\
| max(x&0x01800000, y&0x01800000)\
| max(x&0x00600000, y&0x00600000)\
| ((x&0x001fffff) | (y&0x001fffff));
return ret;
} ui32 mymin(ui32 x, ui32 y) {
ui32 ret = min(x&0x70000000, y&0x70000000)\
| min(x&0x0e000000, y&0x0e000000)\
| min(x&0x01800000, y&0x01800000)\
| min(x&0x00600000, y&0x00600000)\
| ((x&0x001fffff) & (y&0x001fffff));
return ret;
} inline void PushUp(int rt) {
int lb = rt << ;
int rb = lb | ; nd[rt].mx = mymax(nd[lb].mx, nd[rb].mx);
nd[rt].mn = mymin(nd[lb].mn, nd[rb].mn);
} void Build(int l, int r, int rt) {
if (l == r) {
int x;
scanf("%d", &x);
nd[rt].mx = nd[rt].mn = calc(x);
return ;
} int mid = (l + r) >> ; Build(lson);
Build(rson);
PushUp(rt);
} ui32 Query_mx(int l, int r, int rt) {
if (L<=l && R>=r) {
return nd[rt].mx;
} int mid = (l + r) >> ;
ui32 ret; if (R <= mid) {
ret = Query_mx(lson);
} else if (L > mid) {
ret = Query_mx(rson);
} else {
ui32 ltmp = Query_mx(lson);
ui32 rtmp = Query_mx(rson);
ret = mymax(ltmp, rtmp);
} return ret;
} ui32 Query_mn(int l, int r, int rt) {
if (L<=l && R>=r) {
return nd[rt].mn;
} int mid = (l + r) >> ;
ui32 ret; if (R <= mid) {
ret = Query_mn(lson);
} else if (L > mid) {
ret = Query_mn(rson);
} else {
ui32 ltmp = Query_mn(lson);
ui32 rtmp = Query_mn(rson);
ret = mymin(ltmp, rtmp);
} return ret;
} void Update(int k, int x, int l, int r, int rt) {
if (l == r) {
nd[rt].mx = nd[rt].mn = calc(x);
return ;
} int mid = (l + r) >> ; if (k <= mid)
Update(k, x, lson);
else
Update(k, x, rson); PushUp(rt);
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int n, q;
char op[];
int tmp, k;
int ans; init();
while (scanf("%d %d", &n, &q) != EOF) {
Build(, n, );
while (q--) {
scanf("%s", op);
if (op[] == 'L') {
scanf("%d %d %d", &L, &R, &mod);
tmp = Query_mx(, n, );
ans = getVal(tmp);
printf("%d\n", ans);
} else if (op[] == 'G') {
scanf("%d %d %d", &L, &R, &mod);
tmp = Query_mn(, n, );
ans = getVal(tmp);
printf("%d\n", ans);
} else {
scanf("%d %d", &k, &tmp);
Update(k, tmp, , n, );
}
}
} #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}

【HDOJ】3071 Gcd & Lcm game的更多相关文章

  1. 【Pollard-rho算法】【DFS】poj2429 GCD & LCM Inverse

    题意:给你一两个数m和n,它们分别是某对数A,B的gcd和lcm,让你求出一对使得A+B最小的A,B. n/m的所有质因子中,一定有一部分是只在A中的,另一部分是只在B中的. 于是对n/m质因子分解后 ...

  2. 【HDOJ】1695 GCD

    莫比乌斯反演简单题目. /* 1695 */ #include <iostream> #include <string> #include <map> #inclu ...

  3. 【51NOD-0】1012 最小公倍数LCM

    [算法]欧几里德算法 #include<cstdio> int gcd(int a,int b) {?a:gcd(b,a%b);} int main() { int a,b; scanf( ...

  4. 【精】iOS GCD 具体解释

    一.介绍 1.什么是GCD? Grand Central Dispatch.是苹果公司开发的一套多核编程的底层API. GCD首次公布在Mac OS X 10.6,iOS4及以上也可用.GCD存在于l ...

  5. 【51nod】2026 Gcd and Lcm

    题解 话说LOJ说我今天宜学数论= =看到小迪学了杜教筛去蹭了一波小迪做的题 标解的杜教筛的函数不懂啊,怎么推的毫无思路= = 所以写了个复杂度稍微高一点的?? 首先,我们发现f是个积性函数,那么我们 ...

  6. 【HDOJ】4983 Goffi and GCD

    题意说的非常清楚,即求满足gcd(n-a, n)*gcd(n-b, n) = n^k的(a, b)的不同对数.显然gcd(n-a, n)<=n, gcd(n-b, n)<=n.因此当n不为 ...

  7. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  8. 【数论】二进制GCD

    二进制GCD     GCD这种通用的算法相信每个OLER都会 ,辗转相除,代码只有四行 : int GCD(int a,int b){ if(b==0) return a; return GCD(b ...

  9. 【转】UVALive 5964 LCM Extreme --欧拉函数

    题目大意:求lcm(1,2)+lcm(1,3)+lcm(2,3)+....+lcm(1,n)+....+lcm(n-2,n)+lcm(n-1,n)解法:设sum(n)为sum(lcm(i,j))(1& ...

随机推荐

  1. Oracle存储过程学习使用

    存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值 ...

  2. Jquery on 事件

    $(document).on("click", 'a.AAA', function(){ var flag=$(this).attr('flag'); alert(flag); } ...

  3. Express安装与调试

    Express 是基于Node.Js平台,快速.开放.极简的 web 开发框架. 1.安装 Express的安装通过cmd来进行,过程如下: 首先,先在本地建立一个项目文件夹,取名Nodejs. 然后 ...

  4. NodeJS连接MongoDB数据库时报错

    今天第一次尝试连接MongoDB数据库,具体步骤也很简单. 首先,通过NodeJS运行环境安装MongoDB包,进入要安装的目录,执行语句 npm install mongodb 安装成功后,通过如下 ...

  5. dorado抽取js

    dorado创建的视图文件如果有控件拥有事件的话,那么它是可以抽取js的, 右键视图->抽取JavaScript 然后就会出现一个同名的.js文件 (注意,所有的属性需要有id,因为js需要绑定 ...

  6. OpenJudge / Poj 1044 Date bugs C++

    链接地址: Poj:http://poj.org/problem?id=1044 OpenJudge:http://bailian.openjudge.cn/practice/1044/ 题目: 总时 ...

  7. HDOJ(1003) Max Sum

    写的第一个版本,使用穷举(暴力)的方法,时间复杂度是O(N^2),执行时间超过限制,代码如下: #include <stdio.h> #define MAX_LEN 100000UL in ...

  8. Web前端新人笔记之jquery入门

    本章将为大家介绍以下几点内容: 1.jquery的主要特点: 2.建立jquery的编码环境: 3.简单jquery脚本示例: 4.选择jquery而不是纯javaScript的理由: 5.常用的jq ...

  9. javascript 弹出的窗口返回值给 父窗口

    直接上代码,有些地方可以用到: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <H ...

  10. 组织http请求

    post方式 string stratTime=""; string end=""://要拼接的参数 string postURL = "http:/ ...