zoukankan      html  css  js  c++  java
  • LKOJ20201119Contest

    比赛入口

    (T1.quad uqquad)(差分)

    看到这种多次修改、最终查询的题目就应该想到差分。

    那么这道题维护下三角,即是斜着差分,三角有下界,即是横着差分。

    斜着和横着分别求过前缀和后,再竖着求一遍前缀和即是原数组。

    改题代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    inline int read(){
    	int x=0,f=1;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    	return x*f; 
    }
    const int maxn=2050;
    int n,q,r,c,l,s,a[maxn][maxn],b[maxn][maxn];
    signed main(){
    	freopen("u.in","r",stdin);
    	freopen("u.out","w",stdout);
    	n=read(),q=read();
    	for(int i=1;i<=q;i++){
    		r=read(),c=read();
    		l=read(),s=read();
    		a[r][c]+=s;
    		a[r+l][c+l]-=s;
    		b[r+l][c]-=s;
    		b[r+l][c+l]+=s;
    	}
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    			a[i][j]+=a[i-1][j-1];
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    			b[i][j]+=b[i][j-1];
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    			a[i][j]=a[i][j]+a[i-1][j]+b[i][j];
    	/*
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++)
    			printf("%d ",a[i][j]);
    		puts("");
    	}
    	*/
    	int ans=0;
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    			ans^=a[i][j];
    	printf("%lld
    ",ans);
    	return 0;
    }
    

    (T2.quad v)

    (T3.quad w)

    (T4.quad y)

  • 相关阅读:
    linux 安装 Chrome
    J2EE版本
    Java 源码解析之局部变量检查
    /etc/xinetd.conf 和 /etc/xinetd.d/*【新网络服务配置】
    Linux 内核编译
    linux 汇编
    /etc/ethers【地址映射】
    Linux LAMP 搭建
    Linux ftp 使用
    linux apache
  • 原文地址:https://www.cnblogs.com/syzf2222/p/14018122.html
Copyright © 2011-2022 走看看