题目描述
小蓝最近学习了一种神奇的队列:分布式队列。
简单来说,分布式队列包含 N
个节点(编号为 0
至 N−1
,其中 0
号为主节点),其中只有一个主节点,其余为副节点。
主/副节点中都各自维护着一个队列,当往分布式队列中添加元素时,都是由主节点完成的(每次都会添加元素到主节点对应的队列的尾部);副节点只负责同步主节点中的队列。
可以认为主/副节点中的队列是一个长度无限的一维数组,下标为 0,1,2,3…
,同时副节点中的元素的同步顺序和主节点中的元素添加顺序保持一致。
由于副本的同步速度各异,因此为了保障数据的一致性,元素添加到主节点后,需要同步到所有的副节点后,才具有可见性。
给出一个分布式队列的运行状态,所有的操作都按输入顺序执行。
你需要回答在某个时刻,队列中有多少个元素具有可见性。
样例
3
add 1
add 2
query
add 1
sync 1
sync 1
sync 2
query
sync 1
query
sync 2
sync 2
sync 1
query
算法1
java 代码
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
sc.nextLine();
int []a=new int[n];
while(sc.hasNext()){
String str=sc.nextLine();
if(str.charAt(0)=='a'){
a[0]++;
}
else if(str.charAt(0)=='q'){
int min=100000;
for(int i=0;i<n;i++)
{
if(min>a[i])min=a[i];
}
System.out.println(min);
}
else{
String [] strs = str.split("\\s+");
int Index = Integer.parseInt(strs[1]);
if(a[Index] < a[0]) a[Index] ++;
}
}
}
}