zoukankan      html  css  js  c++  java
  • codechef September Challenge 2017 Sereja and Commands

    ————————————————————————————

    这道题维护一下原序列的差分以及操作的差分就可以了 

    记得倒着差分操作 因为题目保证操作2的l r 小与当前位置

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define lowbit(x) x&-x;
    using namespace std;
    const int M=1e5+7,mod=1e9+7;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int T,n,m;
    int s[M],f[M];
    struct pos{int k,l,r;}q[M];
    void clear(){
        memset(s,0,sizeof(s)); 
        memset(f,0,sizeof(f));
    }
    int main(){
        T=read();
        while(T--){
            n=read(); m=read(); clear();
            for(int i=1;i<=m;i++) q[i].k=read(),q[i].l=read(),q[i].r=read();
            f[m]=1;
            for(int i=m;i;i--){
                int k=q[i].k,l=q[i].l,r=q[i].r;
                if(k==1){
                    s[l]=(s[l]+f[i])%mod;
                    s[r+1]=(s[r+1]-f[i])%mod;
                }
                else{
                    f[l-1]=(f[l-1]-f[i])%mod;
                    f[r]=(f[r]+f[i])%mod;
                }
                f[i-1]=(f[i-1]+f[i])%mod;
            }
            int sum=0;
            for(int i=1;i<=n;i++) sum=(sum+s[i])%mod,printf("%d ",(sum+mod)%mod); puts("");
        }    
        return 0;
    }
    View Code
  • 相关阅读:
    JAVA应用程序占用CPU、内存过高分析过程
    html和css问题?
    html跳动的心实现代码
    css知识点总结
    html注册栏网页练习代码
    前端开发单词大全
    html常用代码合集
    html背景图星际导航图练习
    html迪士尼网页实现代码
    html阿里云网页练习实现代码
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7522237.html
Copyright © 2011-2022 走看看