답안 #130779

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
130779 2019-07-16T05:12:40 Z nandonathaniel Nuclearia (CEOI15_nuclearia) C++14
15 / 100
1000 ms 253560 KB
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MAXN=200005;
LL x[MAXN],y[MAXN],a[MAXN],b[MAXN];

LL dist(LL ax,LL ay,LL bx,LL by){
	return max(abs(ax-bx),abs(ay-by));
}

LL ceiling(LL atas,LL bawah){
	return (atas-1)/bawah+1;
}

int main(){
	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
	LL r,c,n,q,x1,y1,x2,y2;
	cin >> c >> r >> n;
	LL pref[r+5][c+5],prefA[c+5],prefB[c+5],sufA[c+5],sufB[c+5];
	memset(pref,0,sizeof(pref));
	memset(prefA,0,sizeof(prefA));
	memset(prefB,0,sizeof(prefB));
	memset(sufA,0,sizeof(sufA));
	memset(sufB,0,sizeof(sufB));
	for(LL i=1;i<=n;i++)cin >> y[i] >> x[i] >> a[i] >> b[i];
	if(r==1){
		for(LL i=1;i<=n;i++){
			LL brp=ceiling(a[i],b[i]);
			prefA[y[i]]+=a[i];
			prefB[y[i]]+=b[i];
			if(y[i]+brp<=c){
				prefA[y[i]+brp]-=(a[i]-brp*b[i]);
				prefB[y[i]+brp]-=b[i];
			}
		}
		for(LL i=1;i<=c;i++){
			prefA[i]+=(prefA[i-1]-prefB[i-1]);
			prefB[i]+=prefB[i-1];
		}
		for(LL i=1;i<=n;i++){
			LL brp=ceiling(a[i],b[i]);
			sufA[y[i]]+=a[i];
			sufB[y[i]]+=b[i];
			if(y[i]-brp>=1){
				sufA[y[i]-brp]-=(a[i]-brp*b[i]);
				sufB[y[i]-brp]-=b[i];
			}
		}
		for(LL i=c;i>=1;i--){
			sufA[i]+=(sufA[i+1]-sufB[i+1]);
			sufB[i]+=sufB[i+1];
		}
		for(LL i=1;i<=c;i++)prefA[i]+=sufA[i];
		for(LL i=1;i<=c;i++)prefA[i]+=prefA[i-1];
		cin >> q;
		while(q--){
			cin >> y1 >> x1 >> y2 >> x2;
			LL bagi=(pref[y2]-pref[y1])/(y2-y1+1);
			LL sisa=(pref[y2]-pref[y1])/(y2-y1+1);
			if(sisa>=ceiling(y2-y1+1,2))bagi++;
			cout << bagi << '\n';
		}
	}
	for(LL i=1;i<=r;i++){
		for(LL j=1;j<=c;j++){
			for(LL k=1;k<=n;k++)pref[i][j]+=max(0LL,a[k]-b[k]*dist(i,j,x[k],y[k]));
		}
	}
	for(LL i=1;i<=r;i++){
		for(LL j=1;j<=c;j++){
			pref[i][j]+=pref[i][j-1]+pref[i-1][j]-pref[i-1][j-1];
		}
	}
	cin >> q;
	while(q--){
		cin >> y1 >> x1 >> y2 >> x2;
		LL bagi=(pref[x2][y2]-pref[x1-1][y2]-pref[x2][y1-1]+pref[x1-1][y1-1])/((x2-x1+1)*(y2-y1+1));
		LL sisa=(pref[x2][y2]-pref[x1-1][y2]-pref[x2][y1-1]+pref[x1-1][y1-1])%((x2-x1+1)*(y2-y1+1));
		if(sisa>=ceiling((x2-x1+1)*(y2-y1+1),2))bagi++;
		cout << bagi << '\n';
	}
	return 0;
}

# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1081 ms 239972 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1092 ms 243016 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 311 ms 20472 KB Output is correct
2 Correct 83 ms 4344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 314 ms 24864 KB Output is correct
2 Correct 83 ms 4792 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1095 ms 253560 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1071 ms 129912 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 450 ms 24864 KB Output is correct
2 Correct 93 ms 4984 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 440 ms 48120 KB Output is correct
2 Correct 79 ms 4472 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1091 ms 209820 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1087 ms 209788 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1055 ms 28888 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1081 ms 28664 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1074 ms 29304 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1086 ms 28920 KB Time limit exceeded
2 Halted 0 ms 0 KB -