• HOJ——T 1867 经理的烦恼


    http://acm.hit.edu.cn/hoj/problem/view?id=1867

    Source : HCPC 2005 Spring
      Time limit : 2 sec   Memory limit : 32 M

    Submitted : 3490, Accepted : 796

    Jerry是一家公司销售部门的经理。这家公司有很多连锁店,编号为1,2,3,... Jerry每天必须关注每家连锁店的商品数量及其变化,一项很乏味的工作。在连锁店比较少的时候,Jerry喜欢计算编号在[i,j]区间内的连锁店中商品数量为素数的有多少家,但是现在连锁店的数量急剧增长,计算量很大,Jerry很难得出结果。 

    输入格式
    题目有多组输入。每组输入第一行有三个整数:C 连锁店的数量 N 指令的条数 M 每家连锁店初始的商品数量
    接下来有N行,每行有一条指令。指令的格式为:
    0 x y 连锁店x的商品数量变化值为y,y > 0商品数量增加, y < 0减少
    1 i j 输出编号在[i,j]区间内的连锁店中商品数量为素数的有多少家
    1 <= i, x, j < 1000000 连锁店中的商品数量a满足 0 <= a < 10000000,C = N = M = 0标志输入结束

    输出格式
    对于每组输入,输出它的序号。对于一组输入中的1指令输出要求的整数。每组输出后打印一行空行。

    样例输入

    100000 4 4
    0 1 1
    1 4 10
    0 11 3
    1 1 11
    
    20 3 0
    1 1 20
    0 3 3
    1 1 20
    
    0 0 0
    
    样例输出
    CASE #1:
    0
    2
    
    CASE #2:
    0
    1

    树状数组+判断素数(2的一b的空间、、)
     1 #include <algorithm>
     2 #include <cstring>
     3 #include <cstdio>
     4 
     5 using namespace std;
     6 
     7 const int maxn(1500005);
     8 int n,t,sta,val[maxn];
     9 
    10 int tr[maxn];
    11 #define lowbit(x) (x&((~x)+1))
    12 inline void Update(int i,int x)
    13 {
    14     for(;i<=n;i+=lowbit(i)) tr[i]+=x;
    15 }
    16 inline int Query(int x)
    17 {
    18     int ret=0;
    19     for(;x;x-=lowbit(x)) ret+=tr[x];
    20     return ret;
    21 }
    22 
    23 inline bool if_prime(int x)
    24 {
    25     if(x<2) return false;
    26     for(int i=2;i*i<=x;i++)
    27         if(x%i==0) return false;
    28     return true;
    29 }
    30 
    31 int main()
    32 {
    33     for(int i=1;scanf("%d%d%d",&n,&t,&sta);i++)
    34     {
    35         if(!n&&!t&&!sta) break;
    36         memset(tr,0,sizeof(tr));
    37         printf("CASE #%d:
    ",i);
    38         bool flag=0; if(if_prime(sta)) flag=1;
    39         for(int i=1;i<=n;i++)
    40         {
    41             val[i]=sta;
    42             if(flag) Update(i,1);
    43         }
    44         for(int a,b,c;t--;)
    45         {
    46             scanf("%d%d%d",&a,&b,&c);
    47             if(a==0)
    48             {
    49                 bool if1=if_prime(val[b]);
    50                 val[b]+=c;
    51                 bool if2=if_prime(val[b]);
    52                 if(!if1&&if2) Update(b,1);
    53                 if(if1&&!if2) Update(b,-1);
    54             }
    55             else printf("%d
    ",Query(c)-Query(b-1));
    56         }
    57         printf("
    ");
    58     }
    59     return 0;
    60 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    UVA-448
    算法提高-集合选取
    算法训练Maze
    UVA-10061
    树状数组
    前缀和
    【UVA
    统计Linux下的CPU状态信息
    Android_内部文件读取
    Android打开/data/目录以及导出文件
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7396609.html
Copyright © 2020-2023  润新知