QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#671753#5417. Chat Program_DuskerCompile Error//C++202.8kb2024-10-24 14:20:542024-10-24 14:20:55

Judging History

你现在查看的是最新测评结果

  • [2024-10-24 14:20:55]
  • 评测
  • [2024-10-24 14:20:54]
  • 提交

answer

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAX=2e5+5;
int n,k,m,c,d;
int a[MAX],tmp[MAX];
int ori[MAX],tot_ori;
set<int> s;
int tot;
map<int, int> g;


int findf(int x){
	auto p = s.lower_bound(x);
	return p == s.end() ? -1 : g[p];
	int l=1,r=tot,res=-1;
	while(l<=r){
		int mid=l+r>>1;
		if(g[mid]>=x){
			res=mid;
			r=mid-1;
		}
		else
			l=mid+1;
	}
	return res;
}
#undef int
int sum[MAX*4];
void modify(int k,int l,int r,int p,int v){
	if(r<p||l>p)
		return;
	if(l==r&&l==p){
		sum[k]+=v;
		return;
	}
	int mid=l+r>>1;
	modify(k<<1,l,mid,p,v);
	modify(k<<1|1,mid+1,r,p,v);
	sum[k]=sum[k<<1]+sum[k<<1|1];
}
int query(int k,int l,int r,int x,int y){
	if(y<l||x>r)
		return 0;
	if(l>=x&&r<=y)
		return sum[k];
	int mid=l+r>>1;
	int res=0;
	res=query(k<<1,l,mid,x,y);
	res+=query(k<<1|1,mid+1,r,x,y);
	return res;
}
#define int long long
bool check(int x){
	memset(sum,0,sizeof(sum));
	int res=0;
	tot_ori=0;
	
	for(int i=1;i<=n;++i){
		if(a[i]>=x)
			tot_ori++;
	}
	ori[1]=0;
	for(int i=1;i<=m;++i){
		if(a[i]>=x)
			ori[1]++;
	}
	for(int i=2;i+m-1<=n;++i){
		ori[i]=ori[i-1];
		if(a[i-1]>=x)
			ori[i]--;
		if(a[i+m-1]>=x)
			ori[i]++;
//		cout<<"(("<<i<<" "<<ori[i]<<endl;
	}
//	cout<<tot_ori<<endl;

	x-=c;
	for(int i=n-m+1;i<=n;++i){
		int p=findf(tmp[i]);
		modify(1,1,tot,p,1);
	}	
	int p=findf(x);
	if(p!=-1)
		res=max(res,query(1,1,tot,p,tot)+tot_ori-ori[n-m+1]);
	
	for(int i=n-m;i>=1;--i){
		x-=d;
		int p=findf(tmp[i+m]);
		modify(1,1,tot,p,-1);
		p=findf(tmp[i]);
//		cout<<"&"<<g[p]<<endl;
		modify(1,1,tot,p,1);
		p=findf(x);
//		cout<<"@"<<g[p]<<endl;
		if(p!=-1)
			res=max(res,query(1,1,tot,p,tot)+tot_ori-ori[i]);
//		cout<<i<<" * "<<query(1,1,tot,p,tot)+tot_ori-ori[i]<<" "<<ori[i]<<endl;
	}
//	cout<<res<<"*"<<endl;
	return res>=k;
}
int read(){
	int x = 0, f = 1;
	char c = getchar();
	while(c < '0' || c > '9'){
		if(c == '-'){
			f = -1;
		}
		c = getchar();
	}
	while(c >= '0' && c <= '9'){
		x = x*10+c-'0';
		c = getchar();
	}
	return x*f;
}
signed main(){
//	freopen("data.in","r",stdin);
//	freopen("data.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin>>n>>k>>m>>c>>d;
	for(int i=1;i<=n;++i)
		cin >> a[i];
		
	for(int i=1;i<=n;++i)
		tmp[i]=a[i];	
	int cur=0;
	for(int i=1;i<=m;++i){
		tmp[n-m+i]+=cur;
		cur+=d;
	}
	cur=0;
	for(int i=n-m+1;i>=1;--i){
		tmp[i]+=cur;
		cur-=d;
	}
	
	for(int i=1;i<=n;++i){
		s.insert(tmp[i]);
	}
	for(auto v: s)
		g[v] = ++tot;
	//for(set<int>::iterator i=s.begin();i!=s.end();++i)
		//g[++tot]=*i;
		
	int l=0,r=1ll<<60,res;
//	check(9);
	while(l<=r){
		int mid=l+r>>1;
	//	cout<<mid<<endl;
		if(check(mid)){
			res=mid;
			l=mid+1;
		}
		else
			r=mid-1;
	}
	cout<<res;
	return 0;

}

Details

answer.code: In function ‘long long int findf(long long int)’:
answer.code:15:37: error: no match for ‘operator[]’ (operand types are ‘std::map<long long int, long long int>’ and ‘std::_Rb_tree_const_iterator<long long int>’)
   15 |         return p == s.end() ? -1 : g[p];
      |                                     ^
In file included from /usr/include/c++/13/map:63,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:152,
                 from answer.code:1:
/usr/include/c++/13/bits/stl_map.h:504:7: note: candidate: ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = long long int; _Tp = long long int; _Compare = std::less<long long int>; _Alloc = std::allocator<std::pair<const long long int, long long int> >; mapped_type = long long int; key_type = long long int]’
  504 |       operator[](const key_type& __k)
      |       ^~~~~~~~
/usr/include/c++/13/bits/stl_map.h:504:34: note:   no known conversion for argument 1 from ‘std::_Rb_tree_const_iterator<long long int>’ to ‘const std::map<long long int, long long int>::key_type&’ {aka ‘const long long int&’}
  504 |       operator[](const key_type& __k)
      |                  ~~~~~~~~~~~~~~~~^~~
/usr/include/c++/13/bits/stl_map.h:524:7: note: candidate: ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](key_type&&) [with _Key = long long int; _Tp = long long int; _Compare = std::less<long long int>; _Alloc = std::allocator<std::pair<const long long int, long long int> >; mapped_type = long long int; key_type = long long int]’
  524 |       operator[](key_type&& __k)
      |       ^~~~~~~~
/usr/include/c++/13/bits/stl_map.h:524:29: note:   no known conversion for argument 1 from ‘std::_Rb_tree_const_iterator<long long int>’ to ‘std::map<long long int, long long int>::key_type&&’ {aka ‘long long int&&’}
  524 |       operator[](key_type&& __k)
      |                  ~~~~~~~~~~~^~~