1195E - OpenStreetMap - CodeForces Solution


data structures two pointers *2100

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;
int n,m,a,b;
long long x,y,z;
long long g[3006][3006],mini[3006][3006];
long long h[9000010];
long long sum;
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m>>a>>b;
	cin>>h[0]>>x>>y>>z; 
	for(int i=1;i<=9000005;++i) h[i]=(h[i-1]*x+y)%z;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			g[i][j]=h[(i-1)*m+j-1];
		}
	}
	for(int i=1;i<=n;++i){
		deque<int> dq;
		for(int j=1;j<=m;++j){
			while(!dq.empty()&&g[i][dq.back()]>=g[i][j]) dq.pop_back();
			dq.push_back(j);
			if(j>=b){
				while(!dq.empty()&&dq.front()<=j-b) dq.pop_front();
				mini[i][j-b+1]=g[i][dq.front()];
			}
		}
	}
	for(int i=1;i<=m-b+1;++i){
		deque<int> dq;
		for(int j=1;j<=n;++j){
			while(!dq.empty()&&mini[dq.back()][i]>=mini[j][i]) dq.pop_back();
			dq.push_back(j);
			if(j>=a){
				while(!dq.empty()&&dq.front()<=j-a) dq.pop_front();
				sum+=mini[dq.front()][i];
			}
		}
	}
	cout<<sum;
	return 0;
}
					 	 		 					  	 			 	 	 	


Comments

Submit
0 Comments
More Questions

1271A - Suits
259B - Little Elephant and Magic Square
1389A - LCM Problem
778A - String Game
1382A - Common Subsequence
1512D - Corrupted Array
667B - Coat of Anticubism
284B - Cows and Poker Game
1666D - Deletive Editing
1433D - Districts Connection
2B - The least round way
1324A - Yet Another Tetris Problem
246B - Increase and Decrease
22E - Scheme
1566A - Median Maximization
1278A - Shuffle Hashing
1666F - Fancy Stack
1354A - Alarm Clock
1543B - Customising the Track
1337A - Ichihime and Triangle
1366A - Shovels and Swords
919A - Supermarket
630C - Lucky Numbers
1208B - Uniqueness
1384A - Common Prefixes
371A - K-Periodic Array
1542A - Odd Set
1567B - MEXor Mixup
669A - Little Artem and Presents
691B - s-palindrome