답안 #790532

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
790532 2023-07-22T19:54:34 Z CSQ31 Diversity (CEOI21_diversity) C++17
4 / 100
24 ms 2636 KB
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define sz(a) (int)(a.size())
#define all(a) a.begin(),a.end()
#define lb lower_bound
#define ub upper_bound
#define owo ios_base::sync_with_stdio(0);cin.tie(0);
#define debug(...) fprintf(stderr, __VA_ARGS__),fflush(stderr)
#define time__(d) for(long blockTime = 0; (blockTime == 0 ? (blockTime=clock()) != 0 : false);\
debug("%s time : %.4fs\n", d, (double)(clock() - blockTime) / CLOCKS_PER_SEC))
typedef long long int ll;
typedef long double ld;
typedef pair<ll,ll> PII;
typedef pair<int,int> pii;
typedef vector<vector<int>> vii;
typedef vector<vector<ll>> VII;
ll gcd(ll a,ll b){if(!b)return a;else return gcd(b,a%b);}
const int MAXN = 2e5+5,blk = 450;
int a[MAXN];
struct que{
	int l,r,id;
	que(){}
	que(int _l,int _r,int _id):l(_l),r(_r),id(_id){}
	bool operator<(const que &q){
		if((l+blk-1)/blk &1)return make_pair((l+blk-1)/blk,r) < make_pair((q.l+blk-1)/blk,q.r);
		return make_pair((l+blk-1)/blk,-r) < make_pair((q.l+blk-1)/blk,-q.r);
	}
};
int cnt[MAXN],freq[MAXN];
set<int>s;
void add(int x,int c){
	if(freq[cnt[x]] == 1)s.erase(cnt[x]);
	freq[cnt[x]]--;
	cnt[x]+=c;
	freq[cnt[x]]++;
	if(freq[cnt[x]] == 1)s.insert(cnt[x]);
}
ll cal(int n){
	vector<int>v;
	int T = 0;
	for(int x:s){
		v.pb(x);
		T+=freq[x];
	}
	int t = sz(v);
	vector<int>in(t);
	//ans = 1/2(T*n*n + n - sum of squares)
	//for(int x:v)cout<<x<<" ";cout<<'\n';
	//for(int x:v)cout<<freq[x]<<" ";cout<<'\n';
	ll res = T*1LL*n*1LL*n + n,cur = 0;
	//cout<<"res "<<res<<'\n';
	
	vector<int>lf,rg;
	int turn = 0;
	for(int i=0;i<t;i++){
		for(int j=0;j<freq[v[i]];j++){
			if(!turn)lf.pb(v[i]);
			else rg.pb(v[i]);
			turn^=1;
		}
	}
	reverse(all(rg));
	for(int x:rg)lf.pb(x);
	
	ll sum = 0;
	for(int x:lf){
		res-=sum*sum;
		sum+=x;
	}
	reverse(all(lf));
	sum = 0;
	for(int x:lf){
		res-=sum*sum;
		sum+=x;
	}
	reverse(all(lf));
	return res/2;
}
int main()
{
	owo
	int n,q;
	cin>>n>>q;
	for(int i=1;i<=n;i++)cin>>a[i];
	vector<que>qq(q);
	for(int i=0;i<q;i++){
		int l,r;
		cin>>l>>r;
		qq[i] = que(l,r,i);
	}
	sort(all(qq));
	vector<ll>ans(q);
	int L = 1,R = 0;
	for(int i=0;i<q;i++){
		int l = qq[i].l;
		int r = qq[i].r;
		while(L>l){
			L--;
			add(a[L],1);
		}
		while(L<l){
			add(a[L],-1);
			L++;
		}
		while(R<r){
			R++;
			add(a[R],1);
		}
		while(R>r){
			add(a[R],-1);
			R--;
		}
		//cout<<"TES"<<'\n';
		ans[qq[i].id] = cal(r-l+1);		
	}
	for(int i=0;i<q;i++)cout<<ans[i]<<'\n';
	
	
}

Compilation message

diversity.cpp: In function 'll cal(int)':
diversity.cpp:54:29: warning: unused variable 'cur' [-Wunused-variable]
   54 |  ll res = T*1LL*n*1LL*n + n,cur = 0;
      |                             ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 324 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 11 ms 980 KB Output is correct
5 Correct 24 ms 1664 KB Output is correct
6 Runtime error 10 ms 2636 KB Execution killed with signal 11
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 11 ms 980 KB Output is correct
5 Correct 24 ms 1664 KB Output is correct
6 Runtime error 10 ms 2636 KB Execution killed with signal 11
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 11 ms 980 KB Output is correct
5 Correct 24 ms 1664 KB Output is correct
6 Runtime error 10 ms 2636 KB Execution killed with signal 11
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 324 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
14 Correct 11 ms 980 KB Output is correct
15 Correct 24 ms 1664 KB Output is correct
16 Runtime error 10 ms 2636 KB Execution killed with signal 11
17 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 324 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
14 Correct 11 ms 980 KB Output is correct
15 Correct 24 ms 1664 KB Output is correct
16 Runtime error 10 ms 2636 KB Execution killed with signal 11
17 Halted 0 ms 0 KB -