NYOJ 228 士兵杀敌差分标记裸题

Posted roni-i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NYOJ 228 士兵杀敌差分标记裸题相关的知识,希望对你有一定的参考价值。

题目链接

所有元素初始值为0才能这么做:
①l--r全加1
a[l]++; a[r+1]--;
求一遍前缀和为元素本身。
求两遍前缀和为元素前缀和。

#include<cstdio>
#include<string>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<cstring>
#include<set>
#include<queue>
#include<algorithm>
#include<vector>
#include<map>
#include<cctype>
#include<stack>
#include<sstream>
#include<list>
#include<assert.h>
#include<bitset>
#include<numeric>
#define mod 10003
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const int INF = 1<<30;
const int maxn = 1000003;
const double eps = 1e-8;
int t,n,m,q;
int sum[maxn];
int p[maxn],l,r,x,y;
int main()
{
    scanf("%d%d%d",&n,&m,&q);
    memset(p,0,sizeof(p));
    memset(sum,0,sizeof(sum));
    while(m--)
    {
        scanf("%d%d%d",&x,&y,&t);
        p[x]+=t, p[y+1]-=t;
    }
    for(int i=1;i<=n;i++)//此操作过后得到的就是每个士兵的战功
        p[i]+=p[i-1];
    for(int i=1;i<=n;i++)//得到前缀和
        p[i]=(p[i-1]+p[i])%mod;
    while(q--)
    {
        scanf("%d%d",&l,&r);
        printf("%d
",(p[r]-p[l-1]+mod)%mod); //区间询问-前缀和做差&相减防溢所以+mod后再%
    }
    return 0;
}

以上是关于NYOJ 228 士兵杀敌差分标记裸题的主要内容,如果未能解决你的问题,请参考以下文章

NYOJ 116 士兵杀敌 (线段树,区间和)

NYoj-119-士兵杀敌-RMQ算法

nyoj-119 士兵杀敌 线段树

nyoj 108 士兵杀敌

NYOJ 士兵杀敌(1~5)

nyoj 119士兵杀敌(线段树区间最值查询,RMQ算法)