「分塊系列」數列分塊入門3 解題報告

數列分塊入門3

題意概括

區間加法,區間求前驅。

寫在前面

這題的方法與分塊2方法極其類似,建議自行解決。

正題

和上一題類似,但是二分不是用來計數的,而是用來求小于c的最大值的。然后對于不完整快,將小于c的值求最大值,再與所有塊中二分結果求最大值即可。(其他思路上一篇題解已經講了,這里不再復述,代碼注釋也懶得打了,因為比較簡單,很容易理解)

代碼

#include<cstdio>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
#define MAXN 100005int n, m, a[MAXN], p[MAXN], b[1005], mm;
vector<int> v[1005];
int opt, l, r, c;int EF( vector<int> vec, int x ){int l, r, mid, ans(-1);l = 0; r = vec.size() - 1;while( l <= r ){mid = ( l + r ) >> 1;if ( vec[mid] < x ){ans = mid;l = mid + 1;}else r = mid - 1;}return ans;
}int query( int l, int r, int c ){int ans(-1);if ( p[l] == p[r] ){for ( int i = l; i <= r; ++i )if ( a[i] + b[p[l]] < c ) ans = max( ans, a[i] + b[p[l]] );return ans;}for ( int i = l; p[i] == p[l]; ++i )if ( a[i] + b[p[i]] < c ) ans = max( ans, a[i] + b[p[l]] );for ( int i = r; p[i] == p[r]; --i )if ( a[i] + b[p[i]] < c ) ans = max( ans, a[i] + b[p[r]] );for ( int i = p[l] + 1; i <= p[r] - 1; ++i ){int t(EF( v[i], c - b[i] ));if ( t >= 0 ) ans = max( ans, v[i][t] + b[i] );}return ans;
}void re( int x ){v[x].clear();int be(( x - 1 ) * m + 1);for ( int i = be; p[i] == p[be]; i++ ) v[x].push_back( a[i] );sort( v[x].begin(), v[x].end() );
}void Add( int l, int r, int c ){if ( p[l] == p[r] ){for ( int i = l; i <= r; ++i ) a[i] += c;re( p[l] ); return; }for ( int i = l; p[i] == p[l]; ++i ) a[i] += c;re(p[l]);for ( int i = r; p[i] == p[r]; --i ) a[i] += c;re(p[r]);for ( int i = p[l] + 1; i < p[r]; ++i ) b[i] += c;
}int main(){scanf( "%d", &n ); m = (int)sqrt(n);for ( int i = 1; i <= n; ++i ) p[i] = ( i - 1 ) / m + 1, mm = p[i];for ( int i = 1; i <= n; ++i ) scanf( "%d", &a[i] );for ( int i = 1; i <= n; ++i ) v[p[i]].push_back(a[i]);for ( int i = 1; i <= mm; ++i ) sort( v[i].begin(), v[i].end() );for ( int i = 1; i <= n; ++i ){scanf( "%d%d%d%d", &opt, &l, &r, &c );if ( opt ) printf( "%d\n", query( l, r, c ) );else Add( l, r, c );}return 0;
}

總結

分塊切記要觸類旁通,充分發揮分塊的靈活性。

數列分塊系列目錄

數列分塊入門1

數列分塊入門2

數列分塊入門3 <-

數列分塊入門4

數列分塊入門5

數列分塊入門6

數列分塊入門7

數列分塊入門8

數列分塊入門9

蒲公英

公主的朋友

轉載于:https://www.cnblogs.com/louhancheng/p/10051153.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450106.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

創業者自述:我的第一桶金是如何來的

記者采訪王宏筠的當天&#xff0c;北京氣溫已達到30℃&#xff0c;王宏筠從他的鐵灰色奧迪A6車上下來&#xff0c;一身挺括的西裝&#xff0c;打著領帶&#xff0c;肩上背著一個超大的牛皮包。后來他對記者說&#xff0c;穿西服是因為多年在外企養成的習慣&#xff0c;一年中至…

Git cherry-pick后再merge出現一個“奇怪”的現象

背景描述&#xff1a;有的時候基于一個master branch拉出一個獨立feature分支做開發時&#xff0c;兩條分支都在并行開發&#xff0c;如果master分支增加了某些功能&#xff0c;解決了某些關鍵bug&#xff0c;而獨立feature分支不需要所有的增加的commit&#xff0c;只需要某一…

inux系統中如何進入退出vim編輯器

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 VIM編輯器&#xff0c;可以新建文件也可以修改文件&#xff0c;命令為&#xff1a;vim AAA 。AAA就是文件名。 如果這個文件&#xff…

C++ 智能指針六

/* 智能指針unique_ptr */#include <iostream> #include <string> #include <memory> #include <vector>/*unique_ptr 獨占所指向的對象, 同一時刻只能有一個 unique_ptr 指向給定對象(通過禁止拷貝語義, 只有移動語義來實現), 定義于 memory (非memo…

如何掘到第一桶金

第一種類型&#xff1a;才智高遠型 典型代表&#xff1a;《福布斯》中國富豪榜排名第一位、個人資產總計達到83億元的中國希望集團劉氏兄弟。 與一般的創業者不同&#xff0c;劉氏四兄弟劉永言、劉永行、劉永美、劉永好一開始就悟透了“舍得”二字。他們本來都在國家企事業單…

Sublime Text3中文環境設置

Sublime Text3中文環境設置 1、首先打開安裝好的的Sublime軟件,選擇Preferences下面的Package Contorol選項出現彈窗方框 2、在彈窗輸入install package,選擇對應&#xff08;默認第一個&#xff0c;如圖這個&#xff09;命令點擊進入;安裝的時候&#xff0c;左下角會有進度條顯…

C/C++圖形化編程(2)

歸納編程學習的感悟&#xff0c; 記錄奮斗路上的點滴&#xff0c; 希望能幫到一樣刻苦的你&#xff01; 如有不足歡迎指正&#xff01; 共同學習交流&#xff01; &#x1f30e;歡迎各位→點贊 &#x1f44d; 收藏? 留言?&#x1f4dd; 站在巨人的肩上是為了超過巨人&#x…

Git clone之后你的硬盤上究竟發生了什么?

網上關于Git的使用有太多的博客&#xff0c;文章在講解了&#xff0c;大部分是在講解命令的用法&#xff0c;剩下一部分則在講解git的內部原理&#xff0c;看過講解基礎命令使用的文章后&#xff0c;正常的開發使用是沒有什么問題的了&#xff0c;而如果想更深入的了解git“高級…

Shell 語法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 運行sh腳本的2種方法&#xff1a; ./AAA。sh 或者 sh AAA.sh 。&#xff08;其實后輟名不重要。是txt也是可以運行的。&#xff09;…

感知機模型的對偶形式[轉載]

轉自:https://blog.csdn.net/jaster_wisdom/article/details/78240949#commentBox 1.區分一下易混淆的兩個概念&#xff0c;梯度下降和隨機梯度下降&#xff1a; 梯度下降&#xff1a;一次將誤分類集合中所有誤分類點的梯度下降&#xff1b; 隨機梯度下降&#xff1a;隨機選取一…

Android Studio常用快捷鍵

注&#xff1a;本文大部分內容轉載自——碼個蛋微信公眾號里的“熟練這些&#xff0c;才會知道 Android studio 有多高效”由于是微信公眾號通過傳送門看的&#xff0c;沒有原文鏈接。 顯示方法的參數 當我們使用一個方法的時候&#xff0c;會在剛開始的時候顯示出所有的參數。…

中國城市政治地位,政治地位決定一切!!!

第一政治等級&#xff1a;省級城市&#xff08;包括直轄市、特別行政區&#xff09;6個 北京市、上海市、天津市、重慶市、香港特別行政區、澳門特別行政區 第二政治等級&#xff1a;副省級城市&#xff08;含五個計劃單列市&#xff09; 15個 沈陽市、大連市&…

Shell 字符串截取

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux 的字符串截取很有用。有八種方法。 假設有變量 varhttp://www.aaa.com/123.htm 1. # 號截取&#xff0c;刪除左邊字符&#xff0c;…

go語言漸入佳境[6]-operator運算符

運算符和其他語言一樣&#xff0c;Go語言支持多種運算符&#xff0c;用于對變量進行運算。12345678910111213package mainimport "fmt"func main(){ //math() //relation() //logic() //wei() Assign()}算術運算符123456789101112func math(){ a : 4 b:2 fmt.Printf(…

Android應用開發—setResult()的調用時機

本文轉載自setResult()的調用時機&#xff0c;此處做了重新的排版&#xff0c;只是感覺markdown的排版比較好看些&#xff0c;侵刪。 今天遇到這樣一個問題&#xff0c;我在Activity-A中用startActivityForResult()方法啟動了Activity-B&#xff0c;并且在B中通過setResult()方…

記錄騰訊云中礦機病毒處理過程(重裝系統了fu*k)

2019-1-21日常上班的周一 剛想學學kafka&#xff0c;登錄與服務器看看把&#xff0c;誰知ssh特別慢&#xff0c;很奇怪&#xff0c;我以為是我網速問題&#xff0c;斷了wifi&#xff0c;換了網線&#xff0c;通過iterm想要ssh rootx.x.x.x&#xff0c;但是上不去&#xff1f; 就…

從創業失敗中學到的七條教訓

摘要&#xff1a;每個創業者不可能首次創業就能成功。他們的失敗經驗&#xff0c;或許可以指導其他創業者獲得迅速成功。Joshua Hays在文章《7 things I learned from failing that you can avoid》總結了創業失敗后獲得的七條教訓&#xff0c;希望其他創業者可以從中有所收獲&…

unexpected EOF while looking for matching ``‘

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是簡單的測試一個shell 腳本&#xff0c;報錯如題。 原因&#xff1a; 雙引號格式不對。 引號切換為英語格式重新輸入&#xff0c;再運…

對象反序列化出現類型不匹配的情況(spring-boot-devtools)

目前在做springboot項目的shiro session redis共享功能。但是有一個對象我把它放到redis中之后再取出來就會出現類型不匹配的異常 AuthorizationUser user (AuthorizationUser) cache.getSuper(key); 異常信息&#xff1a; java.lang.ClassCastException: com.ch.evaluation.a…

最后一周總結

1&#xff09; 回歸第一周目標 對于第一周的目標&#xff0c;在提高代碼量&#xff0c;多寫多練方面達到了&#xff0c;之前結點編程時還不是很熟悉python&#xff0c;現在寫的比較熟練了&#xff0c;同時學習了一門新的語言Julia&#xff0c;在學習的過程中也看了Julia和Flux的…