| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AAAWWWWWWWAAWWWWWWWW |
| 题目名称 |
丹钓战 |
最终得分 |
25 |
| 用户昵称 |
exil |
运行时间 |
5.068 s |
| 代码语言 |
C++ |
内存使用 |
9.47 MiB |
| 提交时间 |
2026-07-02 12:43:52 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[500500],b[500500];
int f[500005];
signed main(){
freopen("stack.in","r",stdin);
freopen("stack.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,q;
int pan1=0,pan2=0;
cin>>n>>q;
for(int i = 1;i<=n;i++){
cin>>a[i];
if(a[i]!=i)pan1=1;
}
for(int i = n;i>=1;i--){
if(a[i]==a[i+1])f[i]=f[i+1]+1;
else f[i]=1;
}
for(int i = 1;i<=n;i++){
cin>>b[i];
if(b[i]!=n-i+1)pan2=1;
}
if(n<=1000 && q<=1000){
for(int i = 1;i<=q;i++){
int l,r;
cin>>l>>r;
stack<int> aa;
stack<int> bb;
int ans=0;
for(int j = l;j<=r;j++){
if(aa.size()==0){
aa.push(a[j]);
bb.push(b[j]);
}
else{
while(aa.size()!=0){
if(aa.top()==a[j] || bb.top()<=b[j]){
aa.pop(),bb.pop();
}
else break;
}
aa.push(a[j]),bb.push(b[j]);
}
if(aa.size()==1)ans++;
}
cout<<ans<<endl;
}
return 0;
}
if(pan1==0){
for(int i = 1;i<=n;i++){
if(b[i]>=b[i-1]){
f[i]=f[i-1]+1;
}
else f[i]=f[i-1];
}
for(int i =1;i<=q;i++){
int l,r;
cin>>l>>r;
cout<<f[r]-f[l-1]<<endl;
}
}
if(pan2==0){
for(int i = 1;i<=q;i++){
int l,r;
cin>>l>>r;
cout<<min(f[l],r)<<endl;
}
}
return 0;
}