有没有大佬看看这题为什么只过了60,测试用例也看不到
差分加dfs
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.StringTokenizer;
public class Main {
static long mod = 998244353;
static int[] a;
static long ans;
public static void main(String[] args) {
IO io = new IO();
int n = io.nextInt(),m = io.nextInt();
a = new int[n+2];
int[][] b = new int[m][2];
for(int i = 0;i<m;i++) {
b[i][0] = io.nextInt();
b[i][1] = io.nextInt();
}
dfs(b,0);
io.print(ans);
io.close();
}
static boolean check() {
int[] ck = new int[a.length];
for(int i = 1;i<a.length-1;i++) {
ck[i] = a[i];
ck[i] += ck[i-1];
}
for(int i = 1;i<ck.length-1;i++) if(ck[i]<2) return false;
return true;
}
static void dfs(int[][] b,int i) {
if(i>0&&check())ans = (ans%mod + 1)%mod;
if(i==b.length)return;
a[b[i][0]]++;
a[b[i][1]+1]--;
dfs(b,i+1);
a[b[i][0]]--;
a[b[i][1]+1]++;
dfs(b,i+1);
}
}
//输入输出快一些
class IO extends PrintWriter {
BufferedReader br;
StringTokenizer st;
public IO(InputStream in, PrintStream out) {
super(out);
br = new BufferedReader(new InputStreamReader(in));
}
public IO() {
this(System.in, System.out);
}
public String next() {
try {
while (st == null || !st.hasMoreElements()) {
st = new StringTokenizer(br.readLine());
}
return st.nextToken();
} catch (Exception e) {
}
return null;
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
}
`
