This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "seats.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
const int maxn = 1e6 + 20;
int n , a[maxn] , pos[maxn] , cnt[maxn * 4] , mn[maxn * 4] , Add[maxn * 4];
bool has[maxn];
int H , tx[maxn] , ty[maxn];
void build(int s = 0 , int e = n , int v = 1)
{
cnt[v] = e - s;
if(e - s < 2)
return;
int m = (s + e) / 2;
build(s , m , 2 * v);
build(m , e , 2 * v + 1);
}
void add(int l , int r , int val , int s = 0 , int e = n , int v = 1)
{
if(l <= s && e <= r)
{
Add[v] += val;
mn[v] += val;
return;
}
if(r <= s || e <= l)
return;
int m = (s + e) / 2;
add(l , r , val , s , m , 2 * v);
add(l , r , val , m , e , 2 * v + 1);
mn[v] = min(mn[2 * v] , mn[2 * v + 1]);
cnt[v] = 0;
if(mn[v] == mn[2 * v])
cnt[v] += cnt[2 * v];
if(mn[v] == mn[2 * v + 1])
cnt[v] += cnt[2 * v + 1];
mn[v] += Add[v];
}
void d(int k , int val)
{
if(k <= 0 || k > n)
return;
if(val == -1 && !has[k])
return;
if(val == 1 && has[k])
return;
has[k] ^= 1;
add(pos[k] , n , pos[k - 1] < pos[k]? -1 * val : 1 * val);
add(pos[k] , n , pos[k + 1] < pos[k]? -1 * val : 1 * val);
}
void give_initial_chart(int HH, int W, vector<int> R, vector<int> C)
{
H = HH;
n = H * W;
build();
for(int i = 0; i < n; i++)
{
tx[i] = R[i] , ty[i] = C[i];
a[i] = C[i] + 1;
pos[a[i]] = i;
}
pos[0] = pos[n + 1] = 1e9;
for(int i = 0; i < n; i++)
d(a[i] , 1);
}
int swap_seats(int x, int y)
{
if(H == 1)
{
for(int i = -1; i <= 1; i++)
d(a[x] + i , -1) , d(a[y] + i , -1);
swap(a[x] , a[y]);
swap(pos[a[x]] , pos[a[y]]);
for(int i = -1; i <= 1; i++)
d(a[x] + i , 1) , d(a[y] + i , 1);
return cnt[1];
}
else
{
swap(tx[x] , tx[y]);
swap(ty[x] , ty[y]);
int res = 0 , mnx = 1e9 , mny = 1e9 , mxx = -1 , mxy = -1;
for(int i = 0; i < n; i++)
{
mnx = min(mnx , tx[i]);
mny = min(mny , ty[i]);
mxx = max(mxx , tx[i]);
mxy = max(mxy , ty[i]);
if((mxx - mnx + 1) * (mxy - mny + 1) == i + 1)
res++;
}
return res;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |