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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

教主的魔法

發(fā)布時(shí)間:2025/7/25 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 教主的魔法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

傳送門:https://www.luogu.org/problemnew/show/P2801

  這道題當(dāng)時(shí)在考場(chǎng)上時(shí)間不夠了w,沒有來得及碼線段樹,也沒有去敲分塊w,只是去搞個(gè)n^2暴力。。。

  結(jié)果,悲哀的事情是,我的快讀寫錯(cuò)了,然后樣例還過了。。。。。自己造的數(shù)據(jù)還是兩位數(shù)的都讀進(jìn)去了w。。。

  然后考完試之后的我依舊不想寫分塊or線段樹。。。。

  于是乎,嘿嘿嘿:

  我們看一下數(shù)據(jù)范圍,Q?≤?3000,一開始的身高?≤?1000,還不強(qiáng)制在線。

  這意味著什么?

  這意味著我們可以搞一些事情。

  由于我們的詢問只有3000個(gè),那么這個(gè)序列就被這詢問的3000個(gè)左端點(diǎn)和3000個(gè)右端點(diǎn)分成了6000段(還是6001段。。。。。這不重要)。

然后對(duì)于每一段我們用s[i][j]?記錄第i段權(quán)值 ≥?j 的有多少個(gè).

  對(duì)于每一段區(qū)間都枚舉一遍所有的詢問,修改肯定是整段區(qū)間一起修改,打個(gè)標(biāo)記就可以了,查詢的時(shí)候把詢問減掉標(biāo)記查一下權(quán)值。

  時(shí)間復(fù)雜度是O(2Q(Q+1000))。

#define B cout << "BreakPoint" << endl; #define O(x) cout << #x << " " << x << endl; #define O_(x) cout << #x << " " << x << " "; #define Msz(x) cout << "Sizeof " << #x << " " << sizeof(x)/1024/1024 << " MB" << endl; #include<cstdio> #include<cmath> #include<iostream> #include<cstring> #include<algorithm> #include<queue> #include<stack> #include<ctime> #define LL long long #define inf 1000000009 #define N 1000000 using namespace std; inline int read() {int s = 0,w = 1;char ch = getchar();while(ch < '0' || ch > '9') {if(ch == '-')w = -1;ch = getchar();}while(ch >= '0' && ch <= '9') {s = s * 10 + ch - '0';ch = getchar();}return s * w; } void file() {//srand(time(NULL)+rand());freopen("qwq.in","r",stdin);freopen("qwq.out","w",stdout); } int n,Q,k,a[N],f[N],len,m,s[6005][1005],tag[N],ans[N],res; struct query {int opt,l,r,v,id; } e[N]; void init() {n = read(),Q = read();for(int i = 1; i <= n; i++) {a[i] = read();}for(int i = 1,c; i <= Q; i++) {c = 0;while(c != 'M' && c != 'A')c = getchar();e[i].opt = (c == 'A');e[i].l = read();e[i].r = read();e[i].v = read();f[++res] = e[i].l;f[++res] = e[i].r + 1;if(c == 'A') {e[i].id = ++k;}}return ; } void solve() {sort(f + 1,f + res + 1);m = unique(f + 1,f + res + 1) - f - 1;f[m + 1] = n + 1;for(int i = 1; i <= Q; i++) {e[i].l = lower_bound(f + 1,f + m + 1,e[i].l) - f;e[i].r = upper_bound(f + 1,f + m + 1,e[i].r) - f - 1;}for(int i = 1; i <= m; i++) {for(int j = f[i]; j < f[i + 1]; j++) {s[i][a[j]]++;}for(int j = 1000; j; j--) {s[i][j] += s[i][j + 1];}}for(int i = 1; i <= m; i++) {for(int j = 1; j <= Q; j++) {if(e[j].l <= i && i <= e[j].r) {if(!e[j].opt) tag[i] += e[j].v;else {if(e[j].v - tag[i] <= 0) ans[e[j].id] += f[i + 1] - f[i];else if(e[j].v - tag[i] <= 1000) ans[e[j].id] += s[i][e[j].v - tag[i]];}}}}for(int i = 1; i <= k; i++) {printf("%d\n",ans[i]);}return ; } int main() {init();solve();return 0; }

  

轉(zhuǎn)載于:https://www.cnblogs.com/excellent-zzy/p/10992031.html

總結(jié)

以上是生活随笔為你收集整理的教主的魔法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。