• POJ 2823 Sliding Window (线段树区间查询)


    题目大意:

    解题思路:

    代码:

      1 # include<iostream>
      2 # include<cstdio>
      3 
      4 using namespace std;
      5 
      6 # define inf 99999999
      7 # define MAX 1000010
      8 
      9 struct Segtree
     10 {
     11     int left, right;
     12     int mx, mn;
     13 }tree[MAX*4];
     14 
     15 int a[MAX];
     16 int maxx,minx;
     17 int n,k;
     18 
     19 void build ( int id,int l,int r )
     20 {
     21     tree[id].left = l; tree[id].right = r;
     22     if ( l==r )
     23     {
     24         int t;
     25         scanf("%d",&t);
     26         tree[id].mx = tree[id].mn = t;
     27         return;
     28     }
     29     else
     30     {
     31         int mid = ( l+r )>>1;
     32         build(id<<1,l,mid);
     33         build(id<<1|1,mid+1,r);
     34         tree[id].mx = max( tree[id<<1].mx,tree[id<<1|1].mx );
     35         tree[id].mn = min( tree[id<<1].mn,tree[id<<1|1].mn );
     36     }
     37 
     38 }
     39 
     40 
     41 void query_min ( int id,int l,int r )
     42 {
     43 
     44     if ( tree[id].left==l&&tree[id].right==r )
     45     {
     46         minx = min( minx,tree[id].mn );
     47         return;
     48     }
     49     else
     50     {
     51         int mid = (tree[id].left+tree[id].right)>>1;
     52         if ( r<=mid )
     53         {
     54             query_min(id<<1,l,r);
     55         }
     56         else if ( l > mid )
     57         {
     58             query_min(id<<1|1,l,r);
     59         }
     60         else
     61         {
     62             query_min(id<<1,l,mid);
     63             query_min(id<<1|1,mid+1,r);
     64         }
     65     }
     66 
     67 }
     68 
     69 void query_max( int id,int l,int r )
     70 {
     71 
     72     if ( tree[id].left==l&&tree[id].right==r )
     73     {
     74         maxx = max( maxx,tree[id].mx );
     75         return;
     76     }
     77     else
     78     {
     79         int mid = ( tree[id].left+tree[id].right )>>1;
     80         if ( r<=mid )
     81         {
     82             query_max( id<<1,l,r );
     83         }
     84         else if ( l > mid )
     85         {
     86             query_max( id<<1|1,l,r );
     87         }
     88         else
     89         {
     90             query_max( id<<1,l,mid );
     91             query_max( id<<1|1,mid+1,r );
     92         }
     93     }
     94 
     95 }
     96 
     97 
     98 
     99 int main(void)
    100 {
    101     while ( scanf("%d %d",&n,&k)!=EOF )
    102     {
    103         int r;
    104         build(1,1,n);
    105         int m = n-k;
    106         for ( int l = 1;l <= m;l++ )
    107         {
    108             r = l+k-1;
    109             minx = inf;
    110             query_min(1,l,r);
    111             printf("%d ",minx);
    112         }
    113         minx = inf;
    114         query_min(1,m+1,n);
    115         printf("%d
    ",minx);
    116 
    117         for ( int l = 1;l <= m;l++ )
    118         {
    119             r = l+k-1;
    120             maxx = -inf;
    121             query_max(1,l,r);
    122             printf("%d ",maxx);
    123         }
    124         maxx = -inf;
    125         query_max(1,m+1,n);
    126         printf("%d
    ",maxx);
    127 
    128     }
    129 
    130 
    131     return 0;
    132 }
  • 相关阅读:
    jmeter如何操作数据库
    jmeter压力测试
    cmd中用ping命令时,提示ping命令不是外部或内部命令问题
    scrapy post Request payload类型值
    scrapy-deltafetch实现增量爬取
    django虚拟环境搭建笔记
    python Image模块基本语法
    登录北京住房公积金,使用已注册过账号
    登录北京社保网站
    python通过pop3方式登录邮箱(qq,新浪,网易)
  • 原文地址:https://www.cnblogs.com/wikioibai/p/4452280.html
Copyright © 2020-2023  润新知