QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#671753 | #5417. Chat Program | _Dusker | Compile Error | / | / | C++20 | 2.8kb | 2024-10-24 14:20:54 | 2024-10-24 14:20:55 |
Judging History
This is the latest submission verdict.
- [2024-10-24 14:20:55]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2024-10-24 14:20:54]
- Submitted
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;
}
詳細信息
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) | ~~~~~~~~~~~^~~