#include<iostream>
#include<unordered_map>
using namespace std;
struct loc{
int pid;//当前位置被pid占用
int value;//当前位置的值
bool zy;//是否占用
int last;//上一次被占用
};
int last;
unordered_map<int,loc> space;
int main(){
int n,m,k;
cin>>n>>m>>k;
for(int i=0;i<k;i++){
int op,id,l,r,x;
cin>>op;
switch(op){
case 0:{
cin>>id>>l>>r>>x;
// bool flag = true;
for(int j=l;j<=r;j++){
loc wz = space[j];//获取j位置的信息
// cout<<"wz.id:"<<wz.pid<<" wz.zy:"<<wz.zy<<endl;
if((wz.pid==0&&wz.zy==false)||(wz.pid==id&&wz.zy==true)){ //位置j目前不被任何程序占用
wz.pid = id;
wz.value = x;
wz.zy = true;
wz.last = id;//记录上一次被占用
space[j] = wz;
}else{
// flag = false;
r = j-1;
break;
}
}
if(r!=l-1) cout<<r<<endl;
else cout<<-1<<endl;
// cout<<r<<endl;
break;
}
case 1:{
cin>>id>>l>>r;
bool flag = true;//[l,r]所有位置都被程序id占用
for(int j=l;j<=r;j++){
loc wz = space[j];
if(wz.pid!=id){
flag = false;//有位置没id被占用
break;
}
}
if(flag){
cout<<"OK"<<endl;
for(int j=l;j<=r;j++){
//解除占用
loc wz = space[j];
wz.last = id;//记录上一次被程序id占用
wz.pid = 0;
wz.zy = false;
space[j] = wz;
}
}
else cout<<"FAIL"<<endl;
break;
}
case 2:{
cin>>id>>l>>r;
// cout<<"last:"<<last<<endl;
bool flag = true;
for(int j=l;j<=r;j++){
loc wz = space[j];
// cout<<wz.zy<<" "<<wz.pid<<" "<<endl;
//上一次被占用是被程序id占用
if(wz.zy||id!=wz.last){
flag = false;
break;
}
}
if(flag){
//恢复数据
for(int j=l;j<=r;j++){
loc wz = space[j];
wz.pid = id;
wz.zy = true;
space[j] = wz;
}
cout<<"OK"<<endl;
}
else cout<<"FAIL"<<endl;
break;
}
case 3:{
cin>>l;//l位置
loc wz = space[l];
if(wz.pid==0&&wz.zy==false){
cout<<0<<" "<<0<<endl;
}else{
cout<<wz.pid<<" "<<wz.value<<endl;
}
break;
}
}
}
return 0;
}
CCFCSP磁盘文件操作[暴力代码]25分
最新推荐文章于 2023-11-22 21:51:52 发布