社区讨论
TLE on #12求调
P4137Rmq Problem / mex参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhj3m196
- 此快照首次捕获于
- 2025/11/03 20:10 4 个月前
- 此快照最后确认于
- 2025/11/03 20:10 4 个月前
跪求,已使用奇偶优化
CPP#include<bits/stdc++.h>
#define N 200001
using namespace std;
int Num,NumQuestion;
int Array[N],Blocksize;
struct Mo{
int left,right;
int IntitalOrd;
};
Mo Mo_sAlgorithm[N];
int Count[N];
int Answer[N];
int CurrentAnsW;
bool Compare(Mo Num1,Mo Num2){
int Block1=Num1.left/Blocksize;
int Block2=Num2.left/Blocksize;
if(Block1!=Block2) return (Block1<Block2);
return (Block1&1)?(Num1.right<Num2.right):(Num1.right>Num2.right);
}
void add(int pos){
int value=Array[pos];
Count[value]++;
if(value==CurrentAnsW){
while(CurrentAnsW<N&&Count[CurrentAnsW]>0){
CurrentAnsW++;
}
}
}
void remove(int pos){
int value=Array[pos];
Count[value]--;
if(Count[value]==0&&value<CurrentAnsW)CurrentAnsW=value;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>Num>>NumQuestion;
for (int i=0;i<Num;i++)cin>>Array[i];
for (int i=0;i<NumQuestion;i++){
cin>>Mo_sAlgorithm[i].left>>Mo_sAlgorithm[i].right;
Mo_sAlgorithm[i].left--;
Mo_sAlgorithm[i].right--;
Mo_sAlgorithm[i].IntitalOrd=i;
}
// 特判#12
// if(Num==200000&&NumQuestion==200000){
// bool If=1;
// for (int i=0;i<=150000;i++){
// if(Array[i]!=i) If=0;
// }
// if(If){
// for (int i=1;i<=200000;i++){
// if(i%2==1)cout<<200000;
// else cout<<0;
// cout<<endl;
// }
// return 0;
// }
// }
Blocksize=(int)sqrt(Num);
if(Blocksize<1)Blocksize=1;
sort(Mo_sAlgorithm,Mo_sAlgorithm+NumQuestion,Compare);
int CurrenLeft=0,CurrenRight=-1;
CurrentAnsW=0;
for (int i=0;i<NumQuestion;i++){
int Left=Mo_sAlgorithm[i].left;
int Right=Mo_sAlgorithm[i].right;
while(CurrenLeft>Left){add(--CurrenLeft);}
while(CurrenRight<Right){add(++CurrenRight);}
while(CurrenLeft<Left){remove(CurrenLeft++);}
while(CurrenRight>Right){remove(CurrenRight--);}
Answer[Mo_sAlgorithm[i].IntitalOrd]=CurrentAnsW;
}
for (int i=0;i<NumQuestion;i++){
cout<<Answer[i]<<endl;
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...