当前位置: 首页 > news >正文

CF1746F

发现直接维护区间内每个数的出现次数并不好做。不妨把这个条件外推,假设 \([l,r]\) 中每个数的出现次数都是 \(k\) 的倍数,那么 \(\sum_{i=l}^r a_i\) 也是 \(k\) 的倍数,即后者是前者的必要条件,并且当 \(a_i\) 较大时,后者成立时前者成立的概率会越大。

因此我们可以这样判定:如果 \(\sum_{i=l}^r a_i\)\(k\) 的倍数,那么 \([l,r]\) 中每个数的出现次数都是 \(k\) 的倍数。当然,在此之前,我们要对 \(a_i\)(以及修改的值)进行随机替换(只需确保原本相同的数替换后仍相同),从而提高判定正确率。判定需要进行一定的次数,我取了 \(30\) 次。初始时假定都是成立的,一旦有一次判定不成立即为不成立。若干次以后,错误率已经极低了,基本可以忽略。

于是用树状数组维护序列即可。随机时可以使用 mt19937 以增大随机数的分布范围。

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#define int long long
#define N 1000001using namespace std;mt19937 rnd( time( NULL ) );struct Q
{int op,l,r,k,x,y,flag;
}q[N];int n,a[N],b[N],c[N],d[N],f[N],t[N],tot,m;int lowbit( int x )
{return x & ( -x );
}void upd( int x , int y )
{for( int i = x ; i <= n ; i += lowbit( i ) )t[i] += y;return;
}int que( int x )
{int sum = 0;for( int i = x ; i >= 1 ; i -= lowbit( i ) )sum += t[i];return sum;
}signed main()
{ios::sync_with_stdio( false );cin.tie( 0 );cout.tie( 0 );cin >> n >> m;for( int i = 1 ; i <= n ; i ++ )cin >> a[i],c[++ tot] = a[i];for( int i = 1 ; i <= m ; i ++ ){cin >> q[i].op;if( q[i].op == 1 )cin >> q[i].x >> q[i].y,c[++ tot] = q[i].y;if( q[i].op == 2 )cin >> q[i].l >> q[i].r >> q[i].k,q[i].flag = 1;}sort( c + 1 , c + tot + 1 );tot = unique( c + 1 , c + tot + 1 ) - c - 1;for( int i = 1 ; i <= n ; i ++ )a[i] = lower_bound( c + 1 , c + tot + 1 , a[i] ) - c;for( int i = 1 ; i <= m ; i ++ )if( q[i].op == 1 )q[i].y = lower_bound( c + 1 , c + tot + 1 , q[i].y ) - c;int T = 30;while( T -- ){for( int i = 1 ; i <= tot ; i ++ )b[i] = rnd() % 1000000007 + 1;for( int i = 1 ; i <= n ; i ++ )t[i] = 0;for( int i = 1 ; i <= n ; i ++ )upd( i , b[a[i]] ),f[i] = a[i];for( int i = 1 ; i <= m ; i ++ ){if( q[i].op == 1 ) upd( q[i].x , b[q[i].y] - b[f[q[i].x]] ),f[q[i].x] = q[i].y;if( q[i].op == 2 ){if( ( que( q[i].r ) - que( q[i].l - 1 ) ) % q[i].k )q[i].flag = 0;}}}for( int i = 1 ; i <= m ; i ++ )if( q[i].op == 2 ){if( q[i].flag ) cout << "YES\n";else cout << "NO\n";}return 0;
}
http://www.zskr.cn/news/211.html

相关文章:

  • C#.NET EFCore.BulkExtensions 扩展详解
  • 2025AI赋能HR新纪元,中国AI HR主流厂商大盘点
  • 私有化部署Dify构建企业AI平台教程
  • 树状数组板子2
  • NOIP 集训日记
  • 记录---让网页像现实世界一样“拿起来,放进去”
  • Ubuntu22.04安装Docker过程记录
  • MySQL多表查询
  • 软件工程导论第一次作业
  • 闲话 25.9.8
  • The 2025 ICPC Asia East Continent Online Contest (I)
  • Ubuntu22.04下Docker的安装Docker镜像源问题解决方法
  • 【项目实战】基于Hi3861的鸿蒙智能小车(循迹、超声波避障、远程控制、语音控制、4G定位)有教程代码
  • 【项目实战】基于Hi3861的鸿蒙智能小车(循迹、超声波避障、远程控制、语音控制、4G定位)有教程代码
  • 新手小白如何快速入门PostgreSQL
  • Linux Strace 系统调用工具详解与企业应用
  • 想进大厂?从学习圈子里的“管理术语”开始
  • 配电网二进制粒子群重构(BPSO)
  • Agisoft Metashape Professional 2.2.2.21069 多视点三维建模设计
  • 二分查找
  • html中的latex数据公式展示
  • 深度学习入门基于python
  • 图像配准尝试
  • TypeScript索引访问类型详解
  • 安全不是一个功能-而是一个地基
  • 你的错误处理一团糟-是时候修复它了-️
  • 你的测试又慢又不可靠-因为你测错了东西
  • 国内人力资源信息管理软件排行:选红海云一体化人力HR系统
  • AI Compass前沿速览:字节Seedream4.0、Qwen3-Max、EmbeddingGemma、OneCAT多模态、rStar2-Agent
  • 408 Request Timeout:请求超时,服务器等待客户端发送请求的时间过长。