zoukankan      html  css  js  c++  java
  • [FZYZOJ 1889] 厨房救济

    P1889 -- 厨房救济

    时间限制:1000MS

    内存限制:131072KB

    Description

    众所周知,LZL拥有了N个厨房,曾经因水管问题烦恼一时,在某位神(zhang)秘(ge)男(ge)子(?)给予水管交换器的帮助后,厨房终于正常地运作。不过LZL最近又遇上了新的问题……

    由于他做的菜实在是太好吃了(跟他的体型一样),好多人都分批来各个厨房吃饭,其中主要有小Z、小G、小C、小K等人,这让LZL很头疼,因为人实在是太多了,他无法迅速地知道几个厨房或一个厨房有多少人,不能及时地分配厨师应付。

    现在,LZL找到了你,请求帮助。

    Input Format

    第1行N、K 代表有N个厨房,K个批次的人员

    第2行有N个数,表示每个厨房现有的人数

    从第3至K+2行,每行有一个Q,A和B:

    如果Q = 1,则有一个A和B,表示标号为A的厨房加进了B个人(很奇怪,B永远大于0!)

    如果Q = 2,则有一个A和B,表示请你输出区间[A,B]厨房的人数总和

    Output Format

    对于每一个Q=2的询问,输出相应的值

    Sample Input

    5 3
    1 2 3 4 5 
    2 1 3
    1 2 2
    2 2 5
    

    Sample Output

    6
    16
    

    Hint

    30% N <= 1000 , K <= 1000

    50%  N <=10000, K <= 10000

    100%  N <= 100000 K <= 100000

    所有答案在longlong范围内

     

    ZGG: 神秘男子是谁?

    LZL:问CK吧,他的题我不知道

    ZGG:卧槽,这叫题目?我2秒钟写完了

    LZL:……

    【题解】

    树状数组裸题

     1 #include<stdio.h>
     2 char B[1<<15],*S=B,*T=B;
     3 #define getc() (S==T&&(T=(S=B)+fread(B,1,1<<15,stdin),S==T)?0:*S++)
     4 int n,m,b[100001],c[100001],a[100001];
     5 int lowbit(int x) {return x&(-x);}
     6 int getint() {
     7     int x=0,f=1; char ch=getc();
     8     while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getc();}
     9     while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+ch-'0'; ch=getc();}
    10     return x*f;
    11 }
    12 void modify(int x,int delta) {
    13     
    14     while(x<=n) {
    15         c[x]+=delta;
    16         x+=lowbit(x);
    17     }
    18 } 
    19 int cal(int x) {
    20     int ret=0;
    21     while(x!=0) {
    22         ret+=c[x];
    23         x-=lowbit(x);
    24     }
    25     return ret;
    26 }
    27 main() {
    28     n=getint();m=getint();
    29     for (int i=1;i<=n;++i) {
    30         b[i]=getint();
    31         a[i]=b[i]+a[i-1];
    32         c[i]=a[i]-a[i-lowbit(i)];
    33     }
    34     while(m--) {
    35         int xx=getint();
    36         if(xx==2) {
    37             int p,q;p=getint();q=getint();
    38             printf("%d
    ",cal(q)-cal(p-1));
    39         }
    40         if(xx==1) {
    41             int p,q; p=getint();q=getint();
    42             modify(p,q);
    43         }
    44     }
    45 }
    View Code
  • 相关阅读:
    cadence16.6 中orcad导出网表时ERROR (ORCAP-5004)
    (转)分享一个低功耗项目小小心得
    函数返回值传递
    STM32的SPI问题。
    关于MDK中:RO-data、RW-data、ZI-data
    一个技术汪的开源梦 —— 目录
    一个技术汪的开源梦 —— 微信开发工具包
    一个技术汪的开源梦 —— 公共组件缓存之分布式缓存 Redis 实现篇
    一个技术汪的开源梦 —— 基于 .Net Core 的组件 Nuget 包制作 & 发布
    Quartz.NET Windows 服务示例
  • 原文地址:https://www.cnblogs.com/TonyNeal/p/fzyzoj1889.html
Copyright © 2011-2022 走看看