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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

AtCoder AGC017C Snuke and Spells

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AtCoder AGC017C Snuke and Spells 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接

https://atcoder.jp/contests/agc017/tasks/agc017_c

題解

很久前不會做看了題解,現在又看了一下,只想說,這種智商題真的殺我。。。
轉化成如果現在有\(x\)\(y\), 我們給區間\([y-x+1,y]\)\(+1\),那么答案就是區間內\(0\)的個數。。
于是就很好\(O(n)\)維護了。。然而我真的想不到。。。

代碼

#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define llong long long #define ldouble long double #define uint unsigned int #define ullong unsigned long long #define udouble unsigned double #define uldouble unsigned long double #define modinc(x) {if(x>=P) x-=P;} #define pii pair<int,int> #define piii pair<pair<int,int>,int> #define piiii pair<pair<int,int>,pair<int,int> > #define pli pair<llong,int> #define pll pair<llong,llong> #define Memset(a,x) {memset(a,x,sizeof(a));} using namespace std;const int N = 2e5; int cnt[N+2]; int a[N+2]; int num[N+2]; int n,q,ans;int main() {scanf("%d%d",&n,&q);for(int i=1; i<=n; i++) {scanf("%d",&a[i]); cnt[a[i]]++;}for(int i=1; i<=n; i++){for(int j=max(i-cnt[i]+1,0); j<=i; j++) num[j]++;}for(int i=1; i<=n; i++) if(num[i]==0) ans++;for(int i=1; i<=q; i++){int x,y; scanf("%d%d",&x,&y);cnt[a[x]]--; if(a[x]-cnt[a[x]]>0) {num[a[x]-cnt[a[x]]]--; if(num[a[x]-cnt[a[x]]]==0) ans++;}a[x] = y;if(y-cnt[y]>0) {if(num[y-cnt[y]]==0) ans--; num[y-cnt[y]]++;} cnt[y]++;printf("%d\n",ans);}return 0; }

總結

以上是生活随笔為你收集整理的AtCoder AGC017C Snuke and Spells的全部內容,希望文章能夠幫你解決所遇到的問題。

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