栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3886 Nico Number

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3886 Nico Number

#include <cstdio>#include <cstring>#include <queue>#include <set>#include <vector>#include <cmath>#include <map>#include <stack>#include <algorithm>using namespace std ;#define LL __int64#define INF 0x3f3f3f3f#define PI acos(-1.0)#define root 1,n,1#define int_rt int l,int r,int rt#define lson l,(l+r)/2,rt<<1#define rson (l+r)/2+1,r,rt<<1|1const int mod = 1e9+7 ;const double eqs = 1e-9 ;int cl[400000] , num[400000] ;int a[10000005] , check[10000005] ;int tot ;void init() {    memset(check,-1,sizeof(check)) ;    tot = 0 ;    for(int i = 2 ; i <= 10000000 ; i++) {        if( check[i] == -1 ){ a[tot++] = i ; check[i] = 1 ;        }        for(int j = 0 ; j < tot ; j++) { if( i*a[j] >= 10000000 ) break ; check[i*a[j]] = 0 ; if( i%a[j] == 0 ) break ;        }    }    check[0] = check[1] = check[6] = 1 ;    for(int i = 2 ; i <= 10000000 ; i *= 2)        check[i] = 1 ;}void push_up(int rt) {    cl[rt] = max(cl[rt<<1],cl[rt<<1|1]) ;    num[rt] = num[rt<<1]+num[rt<<1|1] ;}void create(int_rt) {    cl[rt] = num[rt] = 0 ;    if( l == r ) {        scanf("%d", &cl[rt]) ;        if( check[ cl[rt] ] == 1 ) num[rt] = 1 ;        return ;    }    create(lson) ;    create(rson) ;    push_up(rt) ;}void update1(int ll,int rr,int v,int_rt) {    if( ll > r || rr < l ) return ;    if( cl[rt] < v ) return ;    if( l == r ) {        cl[rt] %= v ;        if( check[ cl[rt] ] == 1 ) num[rt] = 1 ;        else num[rt] = 0 ;        return ;    }    update1(ll,rr,v,lson) ;    update1(ll,rr,v,rson) ;    push_up(rt) ;}void update2(int k,int x,int_rt) {    if( l == r && l == k ) {        cl[rt] = x ;        if( check[ cl[rt] ] == 1 ) num[rt] = 1 ;        else num[rt] = 0 ;        return ;    }    int mid = (l+r)/2 ;    if(k <= mid) update2(k,x,lson) ;    else update2(k,x,rson) ;    push_up(rt) ;}int query(int ll,int rr,int_rt) {    if( ll > r || rr < l ) return 0 ;    if( ll <= l && rr >= r ) return num[rt] ;    return query(ll,rr,lson) + query(ll,rr,rson) ;}int main() {    int n , m , i , k , l , r , v , x ;    init() ;    while( scanf("%d", &n) !=EOF ) {        create(root) ;        scanf("%d", &m) ;        while( m-- ) { scanf("%d", &k) ; if( k == 1 ) {     scanf("%d %d", &l, &r) ;     printf("%dn", query(l,r,root)) ; } else if( k == 2 ) {     scanf("%d %d %d", &l, &r, &v) ;     update1(l,r,v,root) ; } else {     scanf("%d %d", &i, &x) ;     update2(i,x,root) ; }        }    }    return 0 ;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372211.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号