• [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 }
  • 相关阅读:
    iOS面试题总结整理(附答案)
    iOS App上传项目遇到的问题
    Could not find Developer Disk Image
    xcode下载方式
    iOS App上架流程(2016详细版)
    Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
    iOS开发之17个常用代码整理
    iOS求职之OC面试题
    Android xmpp 连接基本方法
    Ubuntu安装过程
  • 原文地址:https://www.cnblogs.com/kirai/p/6954097.html
Copyright © 2020-2023  润新知