1 条题解
-
0
设 代表第 次询问是否能修改左边, 代表第 次询问是否能修改右边。初始时假设 。
对于 且 ,显然第 次询问不会对第 次询问产生影响。所以产生影响的只能是逆序对。
对于一对逆序对 ,我们分类讨论:
- :显然第 次询问向左和向右都不能修改。Snuke 不管怎样都会哭泣,故答案为 。
- :为使两次修改区间没有交集,第 次询问只能修改左边,第 次询问只能修改右边。。
- :为使两次修改区间没有交集,第 次询问只能修改右边,第 次询问只能修改左边。。
显然,随着修改操作的进行, 的值只会越来越大,不会出现形如 且 的第 次询问,使得原本不能被 修改的 或 在第 次询问后可以被修改。
最后答案就是 。
#include<iostream> using namespace std; int n,q; int f[5005][2]; int a[5005],b[5005]; int ans=1; const int mod=998244353; int main(){ cin>>n>>q; for(int i=1;i<=q;i++)cin>>a[i]>>b[i]; for(int i=1;i<=q;i++){ f[i][0]=f[i][1]=1; } for(int i=1;i<=q;i++){ for(int j=i+1;j<=q;j++){ if(b[i]>b[j]){ if(a[j]>a[i])f[i][1]=0,f[j][0]=0; if(a[j]<a[i])f[i][0]=0,f[j][1]=0; if(a[i]==a[j])f[j][0]=f[j][1]=0; } } } for(int i=1;i<=q;i++){ ans*=(f[i][0]+f[i][1]); ans%=mod; } cout<<ans<<endl; return 0; }
- 1
信息
- ID
- 1231
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者