Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<cstring>
- using namespace std;
- int n,m,a,b,c,d;
- static int dp[1001][1001];
- static pair<int,pair<int,int> > segtree[2003][2003];
- bool cc;
- int r1,r2,k1,k2,x,y,vrednost;
- pair<int,pair<int,int> >vre;
- void updateredici(int p1,int l,int r,int p)
- {
- if(r<k1||k2<l)
- return;
- if(k1<=l&&r<=k2)
- {
- if(cc){
- segtree[p1][p]=vre;
- }
- else
- {
- segtree[p1][p]=min(segtree[2*p1][p],segtree[2*p1+1][p]);
- }
- return;
- }
- updateredici(p1,l,(l+r)/2,2*p);
- updateredici(p1,(l+r)/2+1,r,2*p+1);
- segtree[p1][p]=min(segtree[p1][2*p],segtree[p1][2*p+1]);
- }
- void updatekoloni(int l,int r,int p)
- {
- if(r<r1||r2<l)
- return;
- if(r1<=l&&r<=r2)
- {
- cc=true;
- updateredici(p,1,m,1);
- return;
- }
- updatekoloni(l,(l+r)/2,2*p);
- updatekoloni((l+r)/2+1,r,2*p+1);
- cc=0;
- updateredici(p,1,m,1);
- }
- pair<int,pair<int,int> > queryredici(int p1,int l,int r,int p)
- {
- if(r<k1||k2<l)
- {
- return make_pair(1000000001,make_pair(0,0));
- }
- if(k1<=l&&r<=k2)
- {
- return segtree[p1][p];
- }
- return min(queryredici(p1,l,(l+r)/2,2*p),queryredici(p1,(l+r)/2+1,r,2*p+1));
- }
- pair<int,pair<int,int> > querykoloni(int l,int r,int p)
- {
- if(r<r1||r2<l)
- {
- return make_pair(1000000001,make_pair(0,0));
- }
- if(r1<=l&&r<=r2)
- {
- return queryredici(p,1,m,1);
- }
- return min(querykoloni(l,(l+r)/2,2*p),querykoloni((l+r)/2+1,r,2*p+1));
- }
- int main()
- {
- cin>>m>>n>>b>>a>>d>>c;
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=m;j++)
- {
- cin>>dp[i][j];
- }
- }
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=m;j++)
- {
- dp[i][j]+=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1];
- }
- }
- int krajx1,krajx2,krajy1,krajy2;
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=m;j++)
- {
- if(i-c>=0&&j-d>=0)
- {
- r1=i-c;
- r2=i;
- k1=j-d;
- k2=j;
- vrednost=dp[r2][k2]-dp[r2][k1]-dp[r1][k2]+dp[r1][k1];
- r1=i-c+1;
- r2=i-c+1;
- k1=j-d+1;
- k2=j-d+1;
- x=i-c+1;
- y=j-d+1;
- vre=make_pair(vrednost,make_pair(x,y));
- updatekoloni(1,n,1);
- }
- }
- }
- int maxi=0;
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=m;j++)
- {
- if(i-a>=0&&j-b>=0)
- {
- r1=i-a;
- r2=i;
- k1=j-b;
- k2=j;
- x=i-a+1;
- y=j-b+1;
- vrednost=dp[r2][k2]-dp[r2][k1]-dp[r1][k2]+dp[r1][k1];
- r1=i-a+2;
- r2=i-c;
- k1=j-b+2;
- k2=j-d;
- pair<int,pair<int,int> > res=querykoloni(1,n,1);
- int brojac=res.first;
- if((vrednost-brojac)>maxi)
- {
- maxi=(vrednost-brojac);
- krajx1=x;
- krajy1=y;
- krajx2=res.second.first;
- krajy2=res.second.second;
- }
- }
- }
- }
- cout<<krajy1<<" "<<krajx1<<endl;
- cout<<krajy2<<" "<<krajx2<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement