zoukankan      html  css  js  c++  java
  • NYOJ 123(插线问点)

     

    士兵杀敌(四)

    时间限制:2000 ms | 内存限制:65535 KB
    难度:5
     
    描述

    南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的任务就是在南将军询问他某个人的军功的时候,快速的报出此人的军功,请你编写一个程序来帮助小工吧。

    假设起始时所有人的军功都是0.

     
    输入
    只有一组测试数据。
    每一行是两个整数T和M表示共有T条指令,M个士兵。(1<=T,M<=1000000)
    随后的T行,每行是一个指令。
    指令分为两种:
    一种形如
    ADD 100 500 55 表示,第100个人到第500个人请战,最终每人平均获得了55军功,每次每人获得的军功数不会超过100,不会低于-100。
    第二种形如:
    QUERY 300 表示南将军在询问第300个人的军功是多少。
    输出
    对于每次查询输出此人的军功,每个查询的输出占一行。
    样例输入
    4 10
    ADD 1 3 10
    QUERY 3
    ADD 2 6 50
    QUERY 3
    样例输出
    10
    60

     1  //对于一堆数据,随时可以增加或减少任意的数据,随时查询其中的数据的大小
     2 #include<stdio.h>
     3 #define Size 1000010
     4 #define lowbit(x) x&(-x)
     5 int ans[Size]={0},n;
     6 void add(int i,int delta)
     7 {
     8     while(i>0)
     9     {
    10         ans[i]+=delta;
    11         i-=lowbit(i);
    12     }
    13 }
    14 int sum(int x)
    15 {
    16     int sum=0;
    17     while(x<=n)
    18     {
    19         sum+=ans[x];
    20         x+=lowbit(x);
    21     }
    22     return sum;
    23 }
    24 int main()
    25 {
    26     int m,from,to,val;
    27     char ch[8];
    28     scanf("%d%d%*c",&m,&n);
    29     while(m--)
    30     {
    31         scanf("%s",ch);
    32         if(ch[0]=='A')
    33         {
    34             scanf("%d%d%d%*c",&from,&to,&val);
    35             add(from-1,-val);      
    36             add(to,val);         
    37         }
    38         else
    39         {
    40             scanf("%d%*c",&from);
    41             printf("%d\n",sum(from));
    42         }
    43     }
    44     return 0;
    45 }        
  • 相关阅读:
    053-113
    053-262
    053-294
    053-494
    053-60
    053-105
    053-102
    053-218
    【转】LiveWriter插入高亮代码插件介绍 基于SyntaxHighighter
    windows live Writer test
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2677217.html
Copyright © 2011-2022 走看看