首页 > 其他分享 >二分+排序

二分+排序

时间:2025-01-11 09:00:15浏览次数:1  
标签:二分 aa begin end int ll 排序 sum

https://codeforces.com/contest/2053/problem/D
https://blog.csdn.net/weixin_61825750/article/details/144799098

#include<bits/stdc++.h>
#define lc p<<1
#define rc p<<1|1
#define INF 2e9
using namespace std;

#define endl '\n'
using ll = long long;
using pii = pair<ll, ll>;
const double PI = acos(-1);
const int N = 1e3+ 10;
const int mod = 998244353;
ll qmi(int a,int p){
	ll sum=1;
	ll aa=a;
	while(p){
		if(p&1){
			sum=(sum*aa)%mod;
		}
		p>>=1;
		aa=(aa*aa)%mod;
	}
	return sum;
}
void solve(){

	int n,q;cin>>n>>q;
	vector<int> a(n),b(n);
	for(int i=0;i<n;i++)
		cin>>a[i];
	for(int i=0;i<n;i++)
		cin>>b[i];
	vector<int> c(a.begin(),a.end()),d(b.begin(),b.end());
	sort(c.begin(),c.end());
	sort(d.begin(),d.end());
	ll ans=1;
	for(int i=0;i<n;i++){
		ans=(ans*min(c[i],d[i]))%mod;
	}
	cout<<ans<<" ";
	while(q--){
		int o,x;cin>>o>>x;
		if(o==1){
			int now=a[x-1];
			a[x-1]++;
			int l=0,r=n-1;
			while(l<r){
				int mid=(l+r+1)>>1;
				if(c[mid]<=now) l=mid;
				else r=mid-1;
			}
			c[l]++;
			if(c[l]-1<d[l]){
				ans=(ans*qmi(c[l]-1,mod-2))%mod;
				ans=(ans*c[l])%mod;
			}
		}
		else{
			int now=b[x-1];
			b[x-1]++;//原数组同步更新
				int l=0,r=n-1;
				while(l<r){
					int mid=(l+r+1)>>1;
					if(d[mid]<=now) l=mid;
					else r=mid-1;
				}
				d[l]++;
				if(d[l]-1<c[l]){
					ans=(ans*qmi(d[l]-1,mod-2))%mod;
					ans=(ans*d[l])%mod;
				}
		}
		cout<<ans<<" ";
	}
	cout<<endl;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	
	int T = 1;
	cin>>T;
	while (T--) {
		solve();
	}
	
	return 0;
}

标签:二分,aa,begin,end,int,ll,排序,sum
From: https://www.cnblogs.com/laileou/p/18665152

相关文章

  • 124.【C语言】数据结构之快速排序的小区间优化和非递归的解决方法
    目录1.小区间优化测试代码运行结果2.非递归的解决方法(重要!)递归产生的问题一般来说,递归改非递归有两种方法算法分析递归产生的二叉树栈的示意图先写代码框架再填写细节部分1.小区间优化回顾121.【C语言】数据结构之快速排序(未优化的Hoare排序存在的问题)以及......
  • 冒泡排序:初学者的必经之路
    ......
  • LeetCode:83.删除排序链表中的重复元素
    LeetCode:83.删除排序链表中的重复元素classListNode{constructor(val,next){this.val=(val===undefined?0:val)this.next=(next===undefined?null:next)}}vardeleteDuplicates=function(head){letp=head//head......
  • 多数元素(排序)
    给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊n/2⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1:输入:nums=[3,2,3]输出:3示例 2:输入:nums=[2,2,1,1,1,2,2]输出:2思路:如果将数组 n......
  • C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代
    常见7种排序算法冒泡排序(BubbleSort)选择排序(SelectionSort)插入排序(InsertionSort)希尔排序(ShellSort)归并排序(MergeSort)快速排序(QuickSort)堆排序(HeapSort)计数排序(CountingSort)算法复杂度1、冒泡排序冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比......
  • python SQLAlchemy ORM——从零开始学习03 如何针对数据库信息进行排序
    03如何进行排序3-1准备工作:因为要排序,所以需要随机多谢数据,model见后文。也需要random进行随机frommodelimportUser,Enginefromsqlalchemy.ormimportsessionmakerimportrandomSession=sessionmaker(bind=Engine)session=Session()defadd_random():na......
  • LeetCode算法题:删除排序链表中的重复元素
    题目描述下面是给定的一段代码 /***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval){this.val=val;}*ListNode(intval,ListNodenext){this.val......
  • Linq中的对数据排序 (C#):OrderBy、OrderByDescending、ThenBy、ThenByDescending
    排序操作基于一个或多个属性对序列的元素进行排序。第一个排序条件对元素执行主要排序。通过指定第二个排序条件,可以对每个主要排序组内的元素进行排序。每个 Student 都有年级、主要院系和一系列分数。 Teacher 还有一个 City 属性,用于标识教师的授课校区。 Department......
  • wqs二分的一些性质和细节
    wqs二分共线情况的处理在我们进行\(wqs\)二分时,需要要求函数是具有凸性的,但是有时候最终所求的点在函数上可能和前后的几个点共线,这时我们在应该如何更新答案呢?此时的取值方式和你二分的\(check\)写法有关。我们以上凸壳为例:\(check\)会对每个斜率求出一个转移的次数。......
  • 【字符串排序】C#和前端js排序问题
    前言前端请求时做了个参数验证,就是简单的计算md5,但是与后端计算的结果始终不一致发现是前后端对字符串排序的默认规则有区别测试代码前端1、示例代码,可以在浏览器的控制台中直接运行e=["","你","1","a","d","B","你好","你0","你d","你A",","......