社区讨论

莫队12pts求条

P7261[COCI 2009/2010 #3] PATULJCI参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhjrbs15
此快照首次捕获于
2025/11/04 07:14
4 个月前
此快照最后确认于
2025/11/04 07:14
4 个月前
查看原帖
样例能过,只AC#1
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k;
int a[300010];
int t[10010];
struct q{
	int l,r,i;
}c[10010];
int len,p[300010];
int ans[10010],sum;
bool cmp(q x,q y){
	if(p[x.l]!=p[y.l]) return p[x.l]<p[y.l];
	return x.r<y.r;
}
void del(int x,int s){
	t[a[x]]--;
	if(t[a[x]]<=s/2&&sum==a[x]) sum=0;
}
void add(int x,int s){
	t[a[x]]++;
	if(t[a[x]]>s/2) sum=a[x];
}
signed main(){
//	ios::sync_with_stdio(0);
//	cin.tie(0); cout.tie(0);
	cin>>n>>k;
	len=sqrt(n);
	for(int i=1;i<=n;i++){
		cin>>a[i];
		p[i]=(i-1)/len+1;
	}
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>c[i].l>>c[i].r;
		c[i].i=i;
	}
	sort(c+1,c+m+1,cmp);
	int l=1,r=0;
	for(int i=1;i<=m;i++){
		while(l<c[i].l) del(l++,c[i].r-c[i].l+1);
		while(r>c[i].r) del(r--,c[i].r-c[i].l+1);
		while(l>c[i].l) add(--l,c[i].r-c[i].l+1);
		while(r<c[i].r) add(++r,c[i].r-c[i].l+1);
		if(t[sum]<=(c[i].r-c[i].l+1)/2) sum=0;
		ans[c[i].i]=sum; 
	}
	for(int i=1;i<=m;i++){
		if(ans[i]==0) cout<<"no\n";
		else cout<<"yes "<<ans[i]<<"\n";
	}
	return 0;
}		

回复

2 条回复,欢迎继续交流。

正在加载回复...