zoukankan      html  css  js  c++  java
  • 【POJ】2019 Cornfields

      1 #include<cstdio>
      2 #define MAXN 300
      3 struct node
      4 {
      5     int big[MAXN<<2],small[MAXN<<2];
      6 };
      7 node tree[MAXN<<2];
      8 int n,b;
      9 inline int MAX(int x,int y)
     10 {
     11     return x>y?x:y;
     12 }
     13 inline int MIN(int x,int y)
     14 {
     15     return x>y?y:x;
     16 }
     17 void SubBuild(int t,int L,int R,int rt)
     18 {
     19     tree[t].big[rt]=0;
     20     tree[t].small[rt]=MAXN;
     21     if(L!=R)
     22     {
     23         int mid=(L+R)>>1;
     24         SubBuild(t,L,mid,rt<<1);
     25         SubBuild(t,mid+1,R,rt<<1|1);
     26     }
     27 }
     28 void Build(int L,int R,int rt)
     29 {
     30     SubBuild(rt,1,n,1);
     31     if(L!=R)
     32     {
     33         int mid=(L+R)>>1;
     34         Build(L,mid,rt<<1);
     35         Build(mid+1,R,rt<<1|1);
     36     }
     37 }
     38 void SubUpdate(int t,int x,int val,int L,int R,int rt)
     39 {
     40     if(L==R)
     41     {
     42         tree[t].big[rt]=MAX(tree[t].big[rt],val);
     43         tree[t].small[rt]=MIN(tree[t].small[rt],val);
     44     }
     45     else
     46     {
     47         int mid=(L+R)>>1;
     48         if(x<=mid)
     49             SubUpdate(t,x,val,L,mid,rt<<1);
     50         else
     51             SubUpdate(t,x,val,mid+1,R,rt<<1|1);
     52         tree[t].big[rt]=MAX(tree[t].big[rt<<1],tree[t].big[rt<<1|1]);
     53         tree[t].small[rt]=MIN(tree[t].small[rt<<1],tree[t].small[rt<<1|1]);
     54     }
     55 }
     56 void Update(int x,int y,int val,int L,int R,int rt)
     57 {
     58     SubUpdate(rt,y,val,1,n,1);
     59     if(L!=R)
     60     {
     61         int mid=(L+R)>>1;
     62         if(x<=mid)
     63             Update(x,y,val,L,mid,rt<<1);
     64         else
     65             Update(x,y,val,mid+1,R,rt<<1|1);
     66     }
     67 }
     68 int SubQueryB(int t,int x,int y,int L,int R,int rt)
     69 {
     70     if(x<=L&&R<=y)
     71         return tree[t].big[rt];
     72     int mid=(L+R)>>1,ans=0;
     73     if(x<=mid)
     74         ans=MAX(ans,SubQueryB(t,x,y,L,mid,rt<<1));
     75     if(y>mid)
     76         ans=MAX(ans,SubQueryB(t,x,y,mid+1,R,rt<<1|1));
     77     return ans;
     78 }
     79 int QueryB(int x1,int x2,int y1,int y2,int L,int R,int rt)
     80 {
     81     if(x1<=L&&R<=x2)
     82         return SubQueryB(rt,y1,y2,1,n,1);
     83     int mid=(L+R)>>1,ans=0;
     84     if(x1<=mid)
     85         ans=MAX(ans,QueryB(x1,x2,y1,y2,L,mid,rt<<1));
     86     if(x2>mid)
     87         ans=MAX(ans,QueryB(x1,x2,y1,y2,mid+1,R,rt<<1|1));
     88     return ans;
     89 }
     90 int SubQueryS(int t,int x,int y,int L,int R,int rt)
     91 {
     92     if(x<=L&&R<=y)
     93         return tree[t].small[rt];
     94     int mid=(L+R)>>1,ans=MAXN;
     95     if(x<=mid)
     96         ans=MIN(ans,SubQueryS(t,x,y,L,mid,rt<<1));
     97     if(y>mid)
     98         ans=MIN(ans,SubQueryS(t,x,y,mid+1,R,rt<<1|1));
     99     return ans;
    100 }
    101 int QueryS(int x1,int x2,int y1,int y2,int L,int R,int rt)
    102 {
    103     if(x1<=L&&R<=x2)
    104         return SubQueryS(rt,y1,y2,1,n,1);
    105     int mid=(L+R)>>1,ans=MAXN;
    106     if(x1<=mid)
    107         ans=MIN(ans,QueryS(x1,x2,y1,y2,L,mid,rt<<1));
    108     if(x2>mid)
    109         ans=MIN(ans,QueryS(x1,x2,y1,y2,mid+1,R,rt<<1|1));
    110     return ans;
    111 }
    112 int main()
    113 {
    114     int q,x,i,j,big,small;
    115     while(~scanf("%d%d%d",&n,&b,&q))
    116     {
    117         Build(1,n,1);
    118         for(i=1;i<=n;i++)
    119         {
    120             for(j=1;j<=n;j++)
    121             {
    122                 scanf("%d",&x);
    123                 Update(i,j,x,1,n,1);
    124             }
    125         }
    126         while(q--)
    127         {
    128             scanf("%d%d",&i,&j);
    129             big=QueryB(i,i+b-1,j,j+b-1,1,n,1);
    130             small=QueryS(i,i+b-1,j,j+b-1,1,n,1);
    131             printf("%d\n",big-small);
    132         }
    133     }
    134     return 0;
    135 }
    新博客:www.zhixiangli.com
  • 相关阅读:
    使用NPOI读取Excel表格内容并进行修改
    JSON.parse()和JSON.stringify()
    切图时图片的选择:JPG、PNG、GIF的区别
    用js把数据从一个页面传到另一个页面
    iframe中positioin:fixed失效问题
    YUV格式&像素
    JS中插入节点的方法appendChild和insertBefore的应用
    CSS的相对定位和就对定位
    CSS中的相对定位和绝对定位
    POJ-1734
  • 原文地址:https://www.cnblogs.com/DrunBee/p/2567340.html
Copyright © 2011-2022 走看看