@[StudyingFather](/user/22030)
去我们OJ嫖的一个,这题是我们模拟赛的一个原题,可能spj需要改一下?
```cpp
#include <bits/stdc++.h>
using namespace std;
ifstream fin,fout,fstd;
ofstream fscore,freport;
const int N=1e5+50, L=20;
int n,s,m;
int a[N], mn[N][L+1], lg[N];
inline int ask(int l,int r) {
if(l>r) return 0;
int i=lg[r-l+1];
return max(mn[l][i],mn[r-(1<<i)+1][i]);
}
inline int judge() {
string sta1, sta2;
fstd>>sta1;
if(!(fout>>sta2)) {return cerr<<"Less Output Than Expected."<<'\n',0;}
if(sta1!=sta2) {return cerr<<"Wrong Answer."<<'\n',0;}
else if(sta2[0]=='N') {return cerr<<"Accept."<<'\n',1;}
fin>>n>>s>>m;
for(int i=1;i<=n;i++)
if(!(fout>>a[i])) {return cerr<<"Less Output Than Expected."<<'\n',0;}
for(int i=1;i<=s;i++) {
int p,d; fin>>p>>d;
if(a[p]!=d) {return cerr<<"Wrong Answer."<<'\n',0;}
}
for(int i=1;i<=n;i++) if(a[i]<1 || a[i]>1e9) {return cerr<<"Wrong Answer."<<'\n',0;}
lg[1]=0;
for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
for(int i=1;i<=n;i++) mn[i][0]=a[i];
for(int i=1;i<=L;i++)
for(int j=1;j+(1<<i)-1<=n;j++)
mn[j][i]=max(mn[j][i-1],mn[j+(1<<(i-1))][i-1]);
for(int i=1;i<=m;i++) {
static int p[N],k,l,r,mnv,mxv;
fin>>l>>r>>k;
mnv=1e9+1, mxv=0;
for(int j=1;j<=k;j++) fin>>p[j], mnv=min(mnv,a[p[j]]);
mxv=max(mxv,ask(l,p[1]-1));
mxv=max(mxv,ask(p[k]+1,r));
for(int j=2;j<=k;j++) mxv=max(mxv,ask(p[j-1]+1,p[j]-1));
if(mnv<=mxv) {return cerr<<"Wrong Answer."<<'\n',0;}
}
return cerr<<"Accept."<<'\n',1;
}
int main(int argc,char *argv[]){
fin.open("input"); //输入文件
fout.open("user_out"); //选手输出文件
fstd.open("answer"); //标准输出文件
//fscore.open(argv[5]);
//freport.open(argv[6]); //错误报告
//int score=atoi(argv[4]);
int score = 100;
cout<<score*judge()<<endl;
fin.close();
fout.close();
fstd.close();
fscore.close();
//freport.close();
return 0;
}
```
by ForgotMe @ 2022-02-17 23:24:12
@[StudyingFather](/user/22030) 请管理员加上上面的 spj。
by ForgotMe @ 2022-02-20 10:05:32
@[Silver187](/user/154560) added & thanks.
by StudyingFather @ 2022-02-20 19:34:41