打卡信奥刷题(2036)用C++实现信奥 P11139 [APC001] D - Array Again
题目摘要:维护一个数列,支持四种操作:批量插入/删除元素、去重和查询出现次数。操作可能涉及大量数据(1≤q≤10^5,1≤x,y≤10^9),需处理大数运算。三个样例展示了不同操作组合的结果,包括批量操作后的查询和去重操作的影响。使用C++的map和queue实现,时间复杂度需优化以处理大规模数据。注意答案可能超出int范围,需使用long long类型。
·
P11139 [APC001] D - Array Again
题目描述
你需要维护一个数列,支持 444 种操作:
1 x y
:连续向数列中插入 yyy 个数 xxx。2 x y
:连续在数列中删除 yyy 次 xxx。如果在某一次删除中 xxx 已经不存在于数列中,则忽略此操作。3
:对数列进行去重,即,对于每个在数列中出现过的不同的正整数 xxx,如果它在数列中出现了大于 111 次,则只在数列中保留一个 xxx,其余全部删除。4 x
:查询数列中 xxx 的出现次数。
对于每个操作 444,请求出其答案。
输入格式
第一行一个整数 qqq,表示询问次数。
接下来 qqq 行,每行若干个整数,表示一次操作。
输出格式
对于每次操作 444 输出一行,表示其答案。
数据保证至少有一次操作 444。
输入输出样例 #1
输入 #1
5
1 2 10
2 2 5
4 2
3
4 2
输出 #1
5
1
输入输出样例 #2
输入 #2
4
1 1000000000 1000000000
1 1000000000 1000000000
1 1000000000 1000000000
4 1000000000
输出 #2
3000000000
输入输出样例 #3
输入 #3
20
4 95002957
2 384405322 255642125
2 384405322 174926753
2 384405322 51265222
1 384405322 311383201
4 384405322
1 384405322 5464229
4 22438767
4 17075617
1 384405322 153189933
1 230228188 148299369
1 7168162 387115701
1 384405322 154480360
1 384405322 438458686
3
1 7961090 98996809
4 153074129
1 975025351 171484003
1 384405322 650527951
4 384405322
输出 #3
0
311383201
0
0
0
650527952
说明/提示
样例解释 111
第 111 次操作:插入 101010 个 222。
第 222 次操作:删除 555 个 222。此后数列中只包含 555 个 222。
第 333 次操作:查询 222 的出现次数,共 555 次。
第 444 次操作:对数列进行去重。此后数列中只包含一个 222。
第 555 次操作:查询 222 的出现次数,共 111 次。
样例解释 222
请注意答案可能会超过 int
的范围。
数据范围
对于 100%100\%100% 的数据,1≤q≤1051\le q\le 10^51≤q≤105,1≤x,y≤1091\le x,y\le 10^91≤x,y≤109。
请注意:由于本题所在比赛没有部分分,故只有通过所有的测试点才可以获得满分,否则会获得 000 分。
C++实现
#include<iostream>
#include<map>
#include<queue>
using namespace std;
map<long long ,long long>p;
queue<long long>q;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int Q;
cin>>Q;
while(Q--){
short opt;
cin>>opt;
if(opt==1){
long long x,y;
cin>>x>>y;
p[x]=p[x]+y;
q.push(x);
}
else if(opt==2){
long long x,y;
cin>>x>>y;
p[x]=max(p[x]-y,0ll);
}
else if(opt==3){
while(!q.empty()){
if(p[q.front()]>1)p[q.front()]=1ll;
q.pop();
}
}
else if(opt==4){
long long x;
cin>>x;
cout<<p[x]<<'\n';
}
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
更多推荐
所有评论(0)