日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ3343 教主的魔法 二分法+分块

發布時間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ3343 教主的魔法 二分法+分块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:給定一個數列,維護:1、[L,R]之間所有的數+=W? 2、求[L,R]中大于等于C的數的數量

題解:更新用add標記,頭尾倆塊暴力重構;查詢將每個塊排序然后二分找。

#include <cmath> #include <ctime> #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std;const int MAXS=1000+2; struct BLOCK{int a[MAXS],b[MAXS],add; }block[MAXS]; int N,M,S; char s;void Update(int l,int r,int x){if((l-1)%S){int p=(l-1)/S+1;for(int i=l-S*(p-1);i<=S && i<=r-(p-1)*S;i++) block[p].a[i]+=x;for(int i=1;i<=S;i++) block[p].b[i]=block[p].a[i];sort(block[p].b+1,block[p].b+S+1);l=p*S+1;}while(l+S-1<=r) block[l/S+1].add+=x,l+=S;if(r%S){int p=l/S+1;r-=S*(p-1);for(int i=1;i<=r;i++) block[p].a[i]+=x;for(int i=1;i<=S;i++) block[p].b[i]=block[p].a[i];sort(block[p].b+1,block[p].b+S+1);} }int Find(int p,int l,int r,int c){c-=block[p].add;int m=(l+r)>>1;while(l<=r){if(block[p].b[m]<c) l=m+1;else r=m-1;m=(l+r)>>1;}return S-l+1; }int Query(int l,int r,int c){int ret=0;if((l-1)%S){int p=(l-1)/S+1;for(int i=l-S*(p-1);i<=r-S*(p-1) && i<=S;i++)if(block[p].a[i]>=c-block[p].add) ret++;l=p*S+1;}while(l+S-1<=r) ret+=Find(l/S+1,1,S,c),l+=S;if(r%S){int p=l/S+1;for(int i=1;i<=r-S*(p-1);i++)if(block[p].a[i]>=c-block[p].add) ret++;}return ret; }int main(){memset(block,0X7F,sizeof(block));block[1].add=0;cin >> N >> M,S=(int)sqrt(N);for(int i=1,j=1,k=1;i<=N;i++,j++){cin >> block[k].a[j],block[k].b[j]=block[k].a[j];if(j==S || i==N){sort(block[k].b+1,block[k].b+j+1);k++,j=0,block[k].add=0;}}N=(N%S?N/S+1:N/S);for(int i=1,l,r,x;i<=M;i++){cin >> s;cin >> l >> r >> x;if(s=='M') Update(l,r,x);if(s=='A') cout << Query(l,r,x) << endl;}return 0; } View Code

?

轉載于:https://www.cnblogs.com/WDZRMPCBIT/p/6464169.html

總結

以上是生活随笔為你收集整理的BZOJ3343 教主的魔法 二分法+分块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。