solve:用subSet方法得到一个子视图并进行遍历
示例代码:(自定义数据可以自己在类里面定义一个比较器)
package xrz385;
import java.util.*;
import java.io.*;
public class d {
public static int n,m,t1;
static long sx,sy;
public static void main(String[] args)throws Exception{
BufferedReader rd=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter wd=new BufferedWriter(new OutputStreamWriter(System.out));
String k[]=rd.readLine().split(" ");
n=Integer.parseInt(k[0]);m=Integer.parseInt(k[1]);
sx=Long.parseLong(k[2]);sy=Long.parseLong(k[3]);
int ans=0;
HashMap<Long,TreeSet<Long>>sk=new HashMap<>();
HashMap<Long,TreeSet<Long>>sp=new HashMap<>();
for(int i=1;i<=n;i++) {
k=rd.readLine().split(" ");
long x=Long.parseLong(k[0]),y=Long.parseLong(k[1]);
TreeSet<Long>tx=new TreeSet<>();
TreeSet<Long>tx2=sk.getOrDefault(x,tx);
tx2.add(y);
sk.put(x,tx2);
TreeSet<Long>ty=new TreeSet<>();
TreeSet<Long>ty2=sp.getOrDefault(y,ty);
ty2.add(x);
sp.put(y,ty2);
}
for(int i=1;i<=m;i++) {
k=rd.readLine().split(" ");
char c=k[0].charAt(0);
long ci=Long.parseLong(k[1]);
if(c=='U') {
if(sk.containsKey(sx)==false) {
sy+=ci;
continue;
}
else {
ans+=sk.get(sx).subSet(sy,true,sy+ci,true).size();
for(Long y:sk.get(sx).subSet(sy,true,sy+ci,true)) {
sp.get(y).remove(sx);
}
sk.get(sx).subSet(sy,true,sy+ci,true).clear();
}
sy+=ci;
}
if(c=='D') {
if(sk.containsKey(sx)==false) {
sy-=ci;
continue;
}
else {
ans+=sk.get(sx).subSet(sy-ci,true,sy,true).size();
for(Long y:sk.get(sx).subSet(sy-ci,true,sy,true)) {
sp.get(y).remove(sx);
}
sk.get(sx).subSet(sy-ci,true,sy,true).clear();
}
sy-=ci;
}
if(c=='L') {
if(sp.containsKey(sy)==false) {
sx-=ci;
continue;
}
else {
ans+=sp.get(sy).subSet(sx-ci,true,sx,true).size();
for(Long x:sp.get(sy).subSet(sx-ci,true,sx,true)) {
sk.get(x).remove(sy);
}
sp.get(sy).subSet(sx-ci,true,sx,true).clear();
}
sx-=ci;
}
if(c=='R') {
if(sp.containsKey(sy)==false) {
sx+=ci;
continue;
}
else {
ans+=sp.get(sy).subSet(sx,true,sx+ci,true).size();
for(Long x:sp.get(sy).subSet(sx,true,sx+ci,true)) {
sk.get(x).remove(sy);
}
sp.get(sy).subSet(sx,true,sx+ci,true).clear();
}
sx+=ci;
}
}
wd.write(sx+" "+sy+" "+ans);
wd.flush();
}
}