HIT 1867 经理的烦恼

简介: 点击打开HIT 1867 思路: 树状数组 分析: 1 题目要求的是给定一个区间求这个区间质数的个数 2 题目给定n条命令和每个店的初始的值,那么我们初始化的时候就要通过判断给定的初始值是否为质数来初始化 3 因为要求的是质数的个数,那...

点击打开HIT 1867

思路: 树状数组
分析:
1 题目要求的是给定一个区间求这个区间质数的个数
2 题目给定n条命令和每个店的初始的值,那么我们初始化的时候就要通过判断给定的初始值是否为质数来初始化
3 因为要求的是质数的个数,那么我们可以这么想,假设现在改变了店铺x的值,那么我们通过判断前后是否是质数的关系来更新树状数组
4 求区间的质数的个数的时候直接求即可

代码:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 1000010;

int n , val;
int num[MAXN];
int treeNum[MAXN];

int lowbit(int x){
    return x&(-x);
}

int getSum(int x){
    int sum = 0;
    while(x){
         sum += treeNum[x];
         x -= lowbit(x);
    }
    return sum;
}

void add(int x , int val){
    while(x < MAXN){
         treeNum[x] += val;
         x += lowbit(x);
    }
}

// 注意判断质数的写法
bool isPrime(int x){
    if(x <= 1)
        return false;
    if(x == 2)
        return true;
    int tmp = sqrt(x);
    for(int i = 2 ; i <= tmp ; i++)
        if(x%i == 0)
            return false;
    return true;
}

void init(){
    int x = 0;
    if(isPrime(val))
        x = 1;
    memset(treeNum , 0 , sizeof(treeNum));
    for(int i = 1 ; i <= n ; i++){
        num[i] = val;
        add(i , x); 
    }
}

void solve(int mark , int x , int y){
    if(mark == 1){
        int ans = getSum(y);    
        ans -= getSum(x-1); 
        printf("%d\n" , ans); 
    }
    else{
        int tmp = num[x];
        num[x] += y;
        if(isPrime(num[x])){
            if(!isPrime(tmp))    
               add(x , 1);
        }
        else{
            if(isPrime(tmp))    
               add(x , -1);
        }
    }
}

int main(){
    int cas = 1; 
    int m , mark;
    int x , y; 
    while(scanf("%d%d%d" , &n , &m , &val) &&n+m+val){
         init(); 
         printf("CASE #%d:\n" , cas++);
         while(m--){
              scanf("%d%d%d" , &mark , &x , &y); 
              solve(mark , x , y);
         }
         puts(""); 
    }
    return 0;
}




目录
打赏
0
0
0
0
15
分享
相关文章
车补申请期,J 人车企团队 6 款办公软件提升效率的绝招在哪里?
在2025年汽车以旧换新补贴申请的关键时期,J人车企团队需高效协作和精准执行。选择合适的办公软件至关重要。本文推荐6款可视化团队协作工具:板栗看板以其任务可视化管理、高效沟通和自定义模板脱颖而出;Monday.com提供自动化流程和数据分析;Wrike擅长任务分配与资源管理;Basecamp界面简洁易用;Notion融合知识管理和任务协作;Slack优化即时通讯和信息管理。这些软件助力团队提升效率,确保车补申请工作顺利完成,增强企业竞争力。
70 8
|
10月前
希望阿里的小伙伴在控制台的易用性多上点心,每次问客服好像都是外包人员,啥也不会
希望阿里的小伙伴在控制台的易用性多上点心,每次问客服好像都是外包人员,啥也不会
157 2
「SQL面试题库」 No_10 超过经理收入的员工
「SQL面试题库」 No_10 超过经理收入的员工
合工大现代企业管理期末报告--阿里巴巴企业管理模式探究
合工大现代企业管理期末报告--阿里巴巴企业管理模式探究
230 0
合工大现代企业管理期末报告--阿里巴巴企业管理模式探究
公司25k招了一个程序员不会优化慢SQL,试用期没过就被开了!
公司25k招了一个程序员不会优化慢SQL,试用期没过就被开了!
​LeetCode刷题实战181: 超过经理收入的员工
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
150 0
​LeetCode刷题实战181: 超过经理收入的员工
开会=浪费时间?阿里技术团队这样开项目复盘会
阿里妹导读:复盘是项目结束后必不可少的阶段,好的复盘会议能够有效地促进团队成长。今天,阿里项目管理专家鹿迦以自身的经验,为大家分享如何做好一个项目的复盘。这篇文章分成两个部分,第一部分简单阐述对这种回顾会议的理解,认识会议的真正价值;第二部分是分享个人操作的团队回顾会议流程。
6890 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等