本文主要是介绍NYOJ123士兵杀敌(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
描述
假设起始时所有人的军功都是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
代码:
#include<stdio.h> #include<string.h> int C[1000008]; int M; int lowbit(int n){return n&-n; } void add(int n,int x) {while(n>0){C[n]+=x;n-=lowbit(n);} } int query(int n){int sum=0;while(n<=M){sum+=C[n];//printf("%d\n",n);n+=lowbit(n);}return sum; }int main() {int T;scanf("%d%d",&T,&M);char str[10];while(T--){inta,b,x;scanf("%s",str);if(!strcmp("ADD",str)){scanf("%d%d%d",&a,&b,&x);add(a-1,-x);//去掉重复的add(b,x);}else{scanf("%d",&x);printf("%d\n",query(x));}for(inti=0;i<=M;i++){printf("%d&&%d\n",i,C[i]);}}}
这篇关于NYOJ123士兵杀敌(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!