제출 #348296

#제출 시각아이디문제언어결과실행 시간메모리
348296tengiz05자리 배치 (IOI18_seats)C++17
0 / 100
325 ms32748 KiB
#include"seats.h"
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>>v;
#define pii pair<int,int>
int h,w;
struct node{
  vector<int> mn,mx;
  int num=10000;
  void update(int pos,int val){
    pos+=num;
    for(mn[pos]=val,mx[pos]=val;pos>1;pos>>=1){
      mn[pos>>1]=min(mn[pos],mn[pos^1]);
      mx[pos>>1]=max(mx[pos],mx[pos^1]);
    }
  }
  int getmn(int l, int r){
    int res=2e9;
    for(l+=num,r+=num;l<=r;l>>=1,r>>=1){
      if(l&1)res=min(res,mn[l++]);
      if(!(r&1))res=min(res,mn[r--]);
    }return res;
  }
  int getmx(int l, int r){
    int res=0;
    for(l+=num,r+=num;l<=r;l>>=1,r>>=1){
      if(l&1)res=max(res,mx[l++]);
      if(!(r&1))res=max(res,mx[r--]);
    }return res;
  }
  pii get(int l,int r){
    pii res={getmn(l,r),getmx(l,r)};
    return res;
  }
  void build(){
    mn.assign(30001,0);
    mn.assign(30001,0);
  }
}tree1,tree2;
void give_initial_chart(int H,int W,vector<int>x,vector<int>y){
    tree1.build();
    tree2.build();
    h=H,w=W;
    for(int i=0;i<h*w;i++){
        v.push_back({x[i],y[i]});
        tree1.update(i,x[i]);
        tree2.update(i,y[i]);
    }
}
int swap_seats(int a,int b){
    tree1.update(a,v[b].first);
    tree2.update(a,v[b].second);
    tree1.update(b,v[a].first);
    tree2.update(b,v[a].second);
    swap(v[a],v[b]);
    int ans=0;
    for(int i=0;i<h*w;i++){
        auto tmp=tree1.get(0,i);
        int l=tmp.first;
        int r=tmp.second;
        tmp=tree2.get(0,i);
        int u=tmp.first;
        int d=tmp.second;
        if((r-l+1)*(d-u+1)==i+1)ans++;
        else i=max(i,(r-l+1)*(d-u+1)-2);
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...