QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#717549 | #9544. Grand Prix of Ballance | blhxzjr# | ML | 0ms | 0kb | C++23 | 2.6kb | 2024-11-06 18:17:05 | 2024-11-06 18:17:06 |
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
int n,m,k,q;
struct seg{
int g,num;
}t[N<<2];
#define ls id<<1
#define rs id<<1|1
#define g(x) t[x].g
#define num(x) t[x].num
inline void up(int id){
if(num(ls)) g(id)=g(ls);
if(num(rs)){
if(g(id)==0) g(id)=g(rs);
else g(id)=__gcd(g(rs),g(id));
}
num(id)=num(ls)+num(rs);
}
inline void build(int id,int l,int r){
if(l==r){
g(id)=num(id)=0; return;
}
int mid=l+r>>1;
build(ls,l,mid),build(rs,mid+1,r);
up(id);
}
void modify(int id,int l,int r,int x,int v){
if(l==r&&l==x){
num(id)+=v;
if(num(id))
g(id)=x;
else g(id)=0;
return;
}
int mid=l+r>>1;
if(x<=mid) modify(ls,l,mid,x,v);
else modify(rs,mid+1,r,x,v);
up(id);
}
vector<int>v(2e5+10,0);
void init(){
const int g=2e5;
for(int i=1;i<g;i++){
for(int j=1;j<=g/i;j++) v[i*j]++;
}
}
int a[N],b[N];
void solve(){
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
}
set<int>st;
for(int i=2;i<=n;i++){
if(a[i]<a[i-1]){
st.insert(i-1);
}
}
int l=0;
const int h=2e5;
build(1,1,h);
for(auto i:st){
int len=i-l;
modify(1,1,h,len,1);
l=i;
}
if(!st.empty()){
cout<<v[g(1)]<<endl;
modify(1,1,h,n-*st.rbegin(),1);
}
else {
cout<<n<<endl;
modify(1,1,h,n,1);
}
st.insert(0);
st.insert(n);
a[0]=0,a[n+1]=2e9+10;
for(int i=1;i<=q;i++){
int p,vv; cin>>p>>vv;
a[p]=vv;
if(st.count(p)){
auto c=st.find(p);
auto d=c;
auto e=++c;
--d;
modify(1,1,h,p-(*d),-1);
modify(1,1,h,(*e)-p,-1);
int qq=*d,hj=*e;
if(a[p]<a[p-1]&&a[p]>a[p+1]){
modify(1,1,h,1,1);
modify(1,1,h,p-1-qq,1);
modify(1,1,h,hj-p,1);
}
else if(a[p]<a[p-1]){
modify(1,1,h,p-1-qq,1);
modify(1,1,h,hj-p+1,1);
}
else if(a[p]>a[p+1]){
modify(1,1,h,p-qq,1);
modify(1,1,h,hj-p,1);
}
}
else{
auto c=st.lower_bound(p);
auto d=c;
auto e=c;
--d;
int qq=*d,hj=*e;
modify(1,1,h,qq-hj,-1);
if(a[p]<a[p-1]&&a[p]>a[p+1]){
modify(1,1,h,1,1);
modify(1,1,h,p-1-qq,1);
modify(1,1,h,hj-p,1);
}
else if(a[p]<a[p-1]){
modify(1,1,h,p-1-qq,1);
modify(1,1,h,hj-p+1,1);
}
else if(a[p]>a[p+1]){
modify(1,1,h,p-qq,1);
modify(1,1,h,hj-p,1);
}
}
auto f=st.find(n);
--f;
if(*f!=0){
modify(1,1,h,n-(*f),-1);
}
if(g(1)==n){
cout<<n<<endl;
}
else
{
int j=1;
cout<<v[g(1)]<<endl;
}
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0);
int t; cin>>t;
init();
while(t--) solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Memory Limit Exceeded
input:
3 3 4 6 1 2 2 1 1 2 2 2 3 3 2 2 3 2 2 1 2 3 4 8 1 2 2 1 1 2 2 2 3 3 2 2 3 2 2 1 2 1 1 2 1 1 3 4 7 1 2 2 1 1 2 2 2 3 3 2 2 3 2 2 1 2 1 1
output:
1