首页 > 其他分享 >差分

差分

时间:2023-12-21 18:15:35浏览次数:40  
标签:return int d% mid 差分 yy xx

P3397 地毯

syoj 1829. 地毯

二维差分板子。

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m;
int a[N][N],s[N][N];
int main(){
	scanf("%d%d",&n,&m);
	while(m--){
		int x,y,xx,yy;
		scanf("%d%d%d%d",&x,&y,&xx,&yy);
		a[x][y]++;
		a[xx+1][yy+1]++;
		a[x][yy+1]--;
		a[xx+1][y]--;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
			printf("%d ",a[i][j]);
		}
		puts("");
	}
	return 0;
} 

P8666 [蓝桥杯 2018 省 A] 三体攻击

syoj 1830. 三体攻击

三维差分的板子。写法类比二维。

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int A,B,C,m;
int ans;
int s[N],d[N];
int la[N],ra[N],lb[N],rb[N],lc[N],rc[N],h[N];
int p(int i,int j,int k){
	if(i>A||j>B||k>C)return 0;
	return ((i-1)*B+j-1)*C+k;
}
void add(int i,int j,int k,int d){s[p(i,j,k)]+=d;}
bool check(int x){
	memset(s,0,sizeof s);
	for(int i=1;i<=x;i++){
		int q=h[i];
		add(la[i],lb[i],lc[i],q);
		add(ra[i]+1,rb[i]+1,lc[i],q);
		add(ra[i]+1,lb[i],rc[i]+1,q);
		add(la[i],rb[i]+1,rc[i]+1,q);
		add(ra[i]+1,lb[i],lc[i],-q);
		add(la[i],rb[i]+1,lc[i],-q);
		add(la[i],lb[i],rc[i]+1,-q);
		add(ra[i]+1,rb[i]+1,rc[i]+1,-q);
	}
	for(int i=1;i<=A;i++)
		for(int j=1;j<=B;j++)
			for(int k=1;k<=C;k++) add(i+1,j,k,s[p(i,j,k)]);
	for(int i=1;i<=A;i++)
		for(int j=1;j<=B;j++)
			for(int k=1;k<=C;k++) add(i,j+1,k,s[p(i,j,k)]);
	for(int i=1;i<=A;i++)
		for(int j=1;j<=B;j++)
			for(int k=1;k<=C;k++) add(i,j,k+1,s[p(i,j,k)]);
	for(int i=1;i<=A*B*C;i++) if(s[i]>d[i]) return 1;
	return 0;
}
int main(){
	scanf("%d%d%d%d",&A,&B,&C,&m);
	for(int i=1;i<=A*B*C;i++) scanf("%d",&d[i]);
	for(int i=1;i<=m;i++) scanf("%d%d%d%d%d%d%d",&la[i],&ra[i],&lb[i],&rb[i],&lc[i],&rc[i],&h[i]);
	int l=1,r=m;
	while(l<=r){
		int mid=(l+r)>>1;
		if(check(mid)){
			r=mid-1;
			ans=mid;
		}
		else l=mid+1;
	} 
	printf("%d",ans);
	return 0;
}

标签:return,int,d%,mid,差分,yy,xx
From: https://www.cnblogs.com/Moyyer-suiy/p/17919775.html

相关文章

  • 前缀和,差分,二叉堆
    目录前缀和一维数组前缀和二维数组前缀和差分二叉堆前缀和一维数组前缀和代码如下:for(inti=0;i<n;i++){if(i==0)y[i]=x[i];elsey[i]=y[i-1]+x[i];}或者for(inti=1;i<=n;i++){y[i]=y[i-1]+x[i];}二维数组前缀和代码如下:for(inti=1;i<=n;i++){f......
  • 1094. 拼车(差分&堆排序)
    Problem:1094.拼车文章目录题目思路Review差分数组定义区间加法减法更新差分数组:为啥这样更新思路1Code思路2Code题目车上最初有capacity个空座位。车只能向一个方向行驶(也就是说,不允许掉头或改变方向)给定整数capacity和一个数组trips,trip[i]=[numPassengersi,......
  • 差分
    P2367语文成绩P2367语文成绩-洛谷暴力模拟过不了,时间复杂度是\(\operatornameO(n^2)\)。差分思想对于数组\(a\),定义\(a\)的差分数组为\(b\),其中\(b_1=a_1,b_i=a_i-a_{i-1}(2\leqi\leqn)\)\(i\)12345678\(a_i\)11221335......
  • 前缀和/差分——acwing算法基础课笔记
    个人笔记,欢迎补充,指正。一维前缀和对于数组:a[1],a[2],a[3]...a[n];其前缀和数组为s[i]=a[1]+a[2]+...+a[i];下标必须从1开始求前缀和1for(inti=1;i<n;++i)2s[i]=s[i-1]+a[i];s[0]需要定义为0作用求原数组里一段数(l,r)的和......
  • 【差分数组】我的日程安排表
    一、我的日程安排表I题目链接:我的日程安排表I实现一个MyCalendar类来存放你的日程安排。如果要添加的日程安排不会造成重复预订,则可以存储这个新的日程安排。当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生重复预订。日程可以用一对整数......
  • CCF认证——202109-2 贡献的变化——差分维护,前缀和算答案
    https://www.acwing.com/problem/content/4010/http://118.190.20.162/view.page?gpid=T130脑子一热抱着玩的心态试了一下三分,当然炸了,就当初认识三分了。正解是考虑p的变化的影响,p变成p+1的时候,答案的值取决于p属于相邻递增数对的值域区间的数量。也可以考虑递减的情况,两......
  • 差分算法总结
    差分是前缀和的逆运算一维差分对于a1,a2,…,an,构造b1,b2,…,bn,使得ai= b1+ b2 + …+bi。此时,b数组成为a数组的差分,a数组称为b数组的前缀和。题目链接:https://www.acwing.com/problem/content/799/代码模版:1#include<iostream>23usingnamespacestd;45co......
  • 【图论】差分约束与SPFA 11.25学习小结
    开篇碎碎念每次都是以开篇碎碎念开头,虽然不知道为什么,但似乎成为了惯例。本来是直接看的差分约束,一上来发现一堆不等式,以为是数学的一个tag乱入图论(x,结果发现还真的是建图来做的,然后学了一下之后...负边权?!跑不了dijkstra啊!!于是学了一下SPFA(虽然...SPFA已死)然后顺道写了一下关于......
  • 前缀和、差分
    前缀和、差分前缀和可以快速求区间和。差分相当于前缀和的逆运算。前缀和、差分都是以空间换时间的算法前缀和定义前缀和可以简单理解为「数列的前n项的和」,是一种重要的预处理方式,能大大降低查询的时间复杂度。一维前缀和题目一LuoguP8218【深进1.例1】求区间和#in......
  • 单端信号和差分信号
    单端信号和差分信号是两种常见的数字信号传输方式:单端信号:-使用单线传输信号,地线作为参考电平。-发送端将数字信号直接发送到传输线上。-接收端根据传输线上的电平高低判断数字信号是1还是0。-优点是实现简单,只需要一条传输线。-缺点是易受外界电磁干扰,传输距离较短。差分......