zoukankan      html  css  js  c++  java
  • 【CCF】除法 树状数组

    【AC】

     1 #include<iostream>
     2 #include<math.h>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 typedef long long LL;
     8 
     9 int N,M;
    10 int type,l,r,v;
    11 int A[100000+10];
    12 LL TreeArr[100000+10];
    13 int lowbit(int i)  
    14 {  
    15     return i&(-i);  
    16 } 
    17 
    18 
    19 void toValue(int i,int num)
    20 {    
    21     while(i<=N)  
    22     {  
    23         TreeArr[i] += num;  
    24         i += lowbit(i);  
    25     }  
    26 }  
    27 
    28 LL sum(int i)  
    29 {  
    30     LL total = 0;  
    31     while(i != 0)  
    32     {  
    33         total += TreeArr[i];  
    34         i -= lowbit(i);  
    35     }  
    36     return total;  
    37 } 
    38 
    39 int main(){
    40 
    41     cin>>N>>M;
    42     memset(TreeArr,0,sizeof(TreeArr));
    43     for(int j=1; j<=N; j++){
    44         cin>>A[j];
    45         toValue(j, A[j]);
    46     }
    47     while(M--){
    48         cin>>type;
    49         if(type==1){
    50             cin>>l>>r>>v;
    51             if(v==1) continue;
    52             for(int i=l; i<=r; i++){
    53                 if(A[i]>=v&&A[i]%v==0){
    54                     toValue(i, A[i]/v-A[i]);
    55                     A[i] /= v;
    56                 }
    57             }
    58         }else if(type==2){
    59             cin>>l>>r;
    60             cout<< sum(r) - sum(l-1)<<endl; 
    61         }
    62     }
    63     return 0;
    64 }
    View Code

    【90分】

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<string>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<map>
     9 using namespace std;
    10 typedef long long ll;
    11 const int maxn=1e5+2;
    12 ll a[maxn];
    13 ll tree[maxn];
    14 int n,m;
    15 int lowbit(int x){
    16     return x&(-x);
    17 }
    18 void add(int k,ll x){
    19     while(k<=n){
    20         tree[k]+=x;
    21         k+=lowbit(k);
    22     }
    23 }
    24 ll query(int k){
    25     ll res=0;
    26     while(k){
    27         res+=tree[k];
    28         k-=lowbit(k);
    29     }
    30     return res;
    31 }
    32 void init(){
    33     memset(tree,0,sizeof(tree));
    34 }
    35 int main(){
    36     while(~scanf("%d%d",&n,&m)){
    37         init();
    38         for(int i=1;i<=n;i++){
    39             scanf("%lld",&a[i]);
    40             add(i,a[i]);
    41         }
    42         int opt,l,r;
    43         ll v;
    44         for(int i=1;i<=m;i++){
    45             scanf("%d%d%d",&opt,&l,&r);
    46             if(opt==1){
    47                 scanf("%lld",&v);
    48                 if(v==1) continue;
    49                 for(int j=l;j<=r;j++){
    50                     if(a[j]>=v&&a[j]%v==0){
    51                         add(j,a[j]/v-a[j]);
    52                         a[j]/=v;
    53                     }
    54                 }
    55             }else{
    56                 ll ans=query(r)-query(l-1);
    57                 printf("%lld
    ",ans);
    58             }
    59         } 
    60     }
    61     return 0;
    62 }
    View Code
  • 相关阅读:
    精品绿色便携软件下载站
    DIV + CSS
    CSS基础
    尘封往事
    最近ゲームにはまってる。
    比水更浓的水
    有些事我得记下来
    一年前的今晚,注定是个岔路口.
    放下全世界
    超级保镖:国外精品个人防火墙亲密接触(2) java程序员
  • 原文地址:https://www.cnblogs.com/itcsl/p/9198054.html
Copyright © 2011-2022 走看看