zoukankan      html  css  js  c++  java
  • [HDOJ1754]I Hate It(分块)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754

    题意:老题了,现场赛总是有很多题,虽然想不到正解,但是服务器都比较劲,用分块暴力可能会过。分块这东西一直知道,但是从来没写过没练过,比较难的题用分块做的特点就是思路简单,但是代码比较复杂。

    这题很简单。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn = 200200;
     5 int n, m, sz;
     6 int a[maxn], b[maxn];
     7 char cmd[5];
     8 
     9 int query(int l, int r) {
    10     int ret = a[l];
    11     for(int i = l; i <= r;) {
    12         if(i % sz == 0 && i + sz <= r) {
    13             ret = max(ret, b[i/sz]);
    14             i += sz;
    15         }
    16         else ret = max(ret, a[i++]);
    17     }
    18     return ret;
    19 }
    20 
    21 void update(int pos, int val) {
    22     a[pos] = val;
    23     int l = pos / sz * sz, r = l + sz;
    24     for(int i = l; i <= r; i++) b[i/sz] = max(b[i/sz], a[i]);
    25 }
    26 
    27 int main() {
    28     // freopen("in", "r", stdin);
    29     int x, y;
    30     while(~scanf("%d%d",&n,&m)) {
    31         sz = (int)sqrt(n);
    32         for(int i = 0; i < n; i++) {
    33             scanf("%d", &a[i]);
    34         }
    35         memset(b, 0, sizeof(b));
    36         for(int i = 0; i < n; i++) {
    37             b[i/sz] = max(b[i/sz], a[i]);
    38         }
    39         while(m--) {
    40             scanf("%s%d%d",cmd,&x,&y);
    41             if(cmd[0] == 'Q') printf("%d
    ", query(--x, --y));
    42             else update(--x, y);
    43         }
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    【Solr】copy字段的应用
    【Solr】Solr的安装部署
    【UEditor】 UEditor整合项目上传资源到阿里云服务器
    【Bootstrap】Bootstrap和Java分页-第二篇
    【Bootstrap】Bootstrap和Java分页-第一篇
    工作那点小事
    ubuntu安装mongodb
    mybatis插入返回主键
    linux查看端口占用命令
    ubuntu安装ssh
  • 原文地址:https://www.cnblogs.com/kirai/p/6954097.html
Copyright © 2011-2022 走看看