<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      題解:CF2056D Unique Median

      解析

      注意到 \(a_i\) 很小,那就不妨讓它更小一點,從最簡單的情況出發。

      \(1 \le a_i \le 1\) 時,顯然所有子數組都是”好數組“。

      \(1 \le a_i \le 2\) 時,如果一個子數組中 \(1\) 的個數與 \(2\) 的個數不同,那么它是“好數組”,否則它不是“好數組”。

      感覺個數相同的情況會更少,并且似乎會更好求,那就求它!

      問題就變成找滿足區間內 \(1\)\(2\) 個數相等的區間個數。

      對于區間問題,有一種常見的做法——把它轉化成前綴的問題。設 \(f(x)\) 表示 \(a[1,x]\) 中,\(1\) 的出現次數比 \(2\) 多多少次,那么如果有 \(y < x\) 滿足 \(f(y) = f(x)\),那么 \(a[y + 1,x]\) 就不是一個 "好數組",因為把長度為 \(y\) 的前綴去掉就相當于去掉了這一部分的貢獻,剩下這一部分 \(1\) 的個數就和 \(2\) 的個數相等了。

      嘗試將這種做法推廣到 \(1 \le a_i \le 10\) 的情況,如果子數組內 \(\le x\) 的元素個數等于 \(> x\) 的元素個數,且子數組內有元素 \(x\),則該子數組不是一個“好數組”,詳見代碼。

      代碼

      /*
      cnt[i][j] 表示前 i 個元素, 1 ~ j 的個數比 j + 1 ~ 10 的多多少個
      不合法的個數就是滿足 cnt[i][j] - cnt[k][j] = 0 (k < i)的個數
      */
      #include <bits/stdc++.h>
      using namespace std;
      const int N = 100000 + 5;
      typedef pair<int,int> pii;
      typedef long long ll;
      int a[N];
      int cnt[N][15],num[N],last[N];//num[i] 表示當前 1 ~ i 的元素個數,last[i] 表示元素 i 最后出現的位置
      map<pii,vector<int> > m;//m[i][j] 存儲的是 <= i 的元素個數比 > i 的元素個數多 j 個的前綴位置
      int main(){
      	ios::sync_with_stdio(false);
      	cin.tie(0),cout.tie(0);
      	int T;
      	cin>>T;
      	while(T--){
      		m.clear();
      		for(int i=1;i<=9;i++){
      			m[{i,0}].push_back(0);
      			num[i] = 0;
      			last[i] = 0;
      		}
      		int n;
      		cin>>n;
      		ll res = 1ll * n * (n + 1) / 2;//總子數組個數
      		for(int i=1;i<=n;i++){
      			cin>>a[i];
      			last[a[i]] = i;
      			for(int j=a[i];j<=9;j++){
      				num[j]++;
      			}
      			for(int j=1;j<=9;j++){
      				cnt[i][j] = num[j] - (i - num[j]);
      				if(last[j] && m.count({j,cnt[i][j]})){
      					int pos = lower_bound(m[{j,cnt[i][j]}].begin(),m[{j,cnt[i][j]}].end(),last[j]) - m[{j,cnt[i][j]}].begin();
                //需要保證剔除前綴后的區間內確實有 j 這個元素,所以要求 < last[j] 的位置個數
      					res -= pos;
      				}
      			}
      			for(int j=1;j<=9;j++){
      				m[{j,cnt[i][j]}].push_back(i);
      			}
      		}
      		cout<<res<<'\n';
      	}
      	return 0;
      }
      
      posted @ 2025-08-20 06:35  yuyce  閱讀(2)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 97久久精品人人澡人人爽| 18禁精品一区二区三区| 99久久精品国产一区二区暴力| 日本三级理论久久人妻电影| 国产精品国产高清国产av| 亚洲成人一区二区av| 国产成人精品中文字幕| 在线中文字幕国产一区| 免费无码一区无码东京热| 伊人色综合一区二区三区影院视频 | 无码囯产精品一区二区免费| 五月丁香啪啪| 国产精品天干天干综合网| 亚洲人午夜精品射精日韩| а∨天堂一区中文字幕| 久久本道综合久久伊人| 国产成人精品久久性色av| 人妻一区二区三区三区| 国产欧美综合在线观看第十页| 72种姿势欧美久久久久大黄蕉| 国内自拍小视频在线看| 亚洲欧美另类久久久精品播放的| 影音先锋男人站| 亚洲无人区一区二区三区| 国产免费高清69式视频在线观看| 狠狠色噜噜狠狠狠狠7777米奇| 强奷漂亮雪白丰满少妇av| 免费无码一区无码东京热| 四虎永久在线精品免费看| 色偷偷www.8888在线观看| 深夜福利资源在线观看| 久热色精品在线观看视频| 亚洲人成人网站色www| 人妻无码∧V一区二区| 国产毛a片啊久久久久久保和丸 | 国产精品免费AⅤ片在线观看| 久久久精品94久久精品| 黔西县| 亚洲www永久成人网站| 动漫AV纯肉无码AV电影网| 喷潮出白浆视频在线观看|