记录编号 584835 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [国家集训队 2011]等差子序列 最终得分 100
用户昵称 Gravatarムラサメ 是否通过 通过
代码语言 C++ 运行时间 0.702 s
提交时间 2023-11-16 13:14:27 内存使用 7.84 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. #define mod 1145141919
  3. typedef long long ll;
  4. using namespace std;
  5. struct node{
  6. long long l,r,sum;
  7. }t[2][40010];
  8. long long tt,n,a[10010];
  9. long long ps[5][10010],md,l1,r1,l2,r2,len,ans,num1,num2;
  10. long long bas[10010];
  11. bool flag;
  12. void build(long long i,long long l,long long r,bool ff){
  13. t[ff][i].l=l;
  14. t[ff][i].r=r;
  15. t[ff][i].sum=0;
  16. if(l==r){
  17. ps[ff][l]=i;
  18. t[ff][i].sum=0;
  19. return;
  20. }
  21. long long mid=(l+r)>>1;
  22. build(i*2,l,mid,ff);
  23. build(i*2+1,mid+1,r,ff);
  24. }
  25. void find(ll i,ll l,ll r,ll ff){
  26. if(l<=t[ff][i].r&&r>=t[ff][i].l){
  27. if(l<=t[ff][i].l&&r>=t[ff][i].r){
  28. ans=(ans+t[ff][i].sum*bas[r-t[ff][i].r])%mod;
  29. return;
  30. }
  31. find(i*2,l,r,ff);
  32. find(i*2+1,l,r,ff);
  33. }
  34. }
  35. void change(ll x,ll ff){
  36. ll now=ps[ff][x];
  37. t[ff][now].sum=1;
  38. while(now/2!=0){
  39. now/=2;
  40. t[ff][now].sum=(t[ff][now*2].sum*bas[t[ff][now*2+1].r-t[ff][now*2+1].l+1]+t[ff][now*2+1].sum)%mod;
  41. }
  42. }
  43. void work(){
  44. memset(t,0,sizeof(t));
  45. memset(a,0,sizeof(a));
  46. memset(ps,0,sizeof(ps));
  47. memset(bas,0,sizeof(bas));
  48. bas[0]=1;
  49. for(int i=1;i<=300005;++i){
  50. bas[i]=bas[i-1]*2%mod;
  51. }
  52. cin>>n;
  53. flag=0;
  54. for(int i=1;i<=n;i++){
  55. cin>>a[i];
  56. }
  57. build(1,1,n,0);
  58. build(1,1,n,1);
  59. for(int i=1;i<=n;i++){
  60. md=a[i];
  61. len=min(a[i]-1,n-a[i]);
  62. l1=a[i]-len;
  63. r1=a[i]+len;
  64. len=2*len+1;
  65. ans=0;
  66. find(1,l1,r1,0);
  67. num1=ans;
  68. r2=n+1-l1;
  69. l2=n+1-r1;
  70. ans=0;
  71. find(1,l2,r2,1);num2=ans;
  72. if(num1!=num2){
  73. flag=1;
  74. break;
  75. }
  76. change(md,0);
  77. change(n-md+1,1);
  78. }
  79. if(flag){
  80. cout<<"Y"<<endl;
  81. }
  82. else{
  83. cout<<"N"<<endl;
  84. }
  85. }
  86. int main(){
  87. freopen("sequence.in","r",stdin);
  88. freopen("sequence.out","w",stdout);
  89. ios::sync_with_stdio(0);
  90. cin.tie(0);
  91. cout.tie(0);
  92. int t;
  93. cin>>t;
  94. for(int i=1;i<=t;i++){
  95. work();
  96. }
  97. return 0;
  98. }