Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- ifstream cin("pasari.in");
- ofstream cout("pasari.out");
- #define MAX_LAT 1000
- int v[MAX_LAT][MAX_LAT],frv[MAX_LAT][MAX_LAT];
- int st[MAX_LAT][MAX_LAT],dr[MAX_LAT][MAX_LAT];
- int sus[MAX_LAT][MAX_LAT],jos[MAX_LAT][MAX_LAT];
- int grid[MAX_LAT];
- void cons(int lin,int n){
- int poz,col;
- st[lin][0]=0;
- poz=1;
- grid[0]=0;
- for(col=1;col<n;col++){
- if(v[lin][grid[poz-1]]>v[lin][col]){
- st[lin][col]=grid[poz-1];
- grid[poz]=col;
- poz++;
- }else{
- while(poz>0 && v[lin][grid[poz-1]]<v[lin][col]){
- poz--;
- }
- if(poz==0)
- st[lin][col]=0;
- else
- st[lin][col]=grid[poz-1];
- grid[poz]=col;
- poz++;
- }
- }
- }
- void cond(int lin,int n){
- int poz,col;
- dr[lin][n-1]=0;
- poz=1;
- grid[n-1]=n-1;
- for(col=n-2;col>=0;col--){
- if(v[lin][grid[poz-1]]>v[lin][col]){
- dr[lin][col]=grid[poz-1];
- grid[poz]=col;
- poz++;
- }else{
- while(poz>0 && v[lin][grid[poz-1]]<v[lin][col]){
- poz--;
- }
- if(poz==0)
- dr[lin][col]=0;
- else
- dr[lin][col]=grid[poz-1];
- grid[poz]=col;
- poz++;
- }
- }
- }
- void conjos(int col,int n){
- int poz,lin;
- jos[n-1][col]=0;
- poz=1;
- grid[n-1]=n-1;
- for(lin=n-2;lin>=0;lin--){
- if(v[lin][grid[poz-1]]>v[lin][col]){
- jos[lin][col]=grid[poz-1];
- grid[poz]=lin;
- poz++;
- }else{
- while(poz>0 && v[grid[poz-1]][col]<v[lin][col]){
- poz--;
- }
- if(poz==0)
- jos[lin][col]=0;
- else
- jos[lin][col]=grid[poz-1];
- grid[poz]=lin;
- poz++;
- }
- }
- }
- void consus(int col,int n){
- int poz,lin;
- sus[0][col]=0;
- poz=1;
- grid[0]=0;
- for(lin=1;lin<n;lin++){
- if(v[lin][grid[poz-1]]>v[lin][col]){
- sus[lin][col]=grid[poz-1];
- grid[poz]=lin;
- poz++;
- }else{
- while(poz>0 && v[grid[poz-1]][col]<v[lin][col]){
- poz--;
- }
- if(poz==0)
- sus[lin][col]=0;
- else
- sus[lin][col]=grid[poz-1];
- grid[poz]=lin;
- poz++;
- }
- }
- }
- int main()
- {
- int cer,n,i,lin,col,max1,ccol,s;
- cin>>cer>>n;
- for(lin=0;lin<n;lin++)
- for(col=0;col<n;col++)
- cin>>v[lin][col];
- for(i=0;i<n;i++){
- consus(i,n);
- conjos(i,n);
- cons(i,n);
- cond(i,n);
- }
- if(cer==1){
- cin>>lin;
- max1=ccol=0;
- for(col=0;col<n;col++){
- s=dr[lin][col]-st[lin][col]+jos[lin][col]-sus[lin][col]+1;
- if(s>max1){
- max1=s;
- ccol=col+1;
- }
- }
- cout<<ccol;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement