Submission #770272

#TimeUsernameProblemLanguageResultExecution timeMemory
770272boyliguanhanSeats (IOI18_seats)C++17
25 / 100
4086 ms65612 KiB
#include "seats.h"
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
struct node{
    int a,b,c,d;
} val[4000100];
int l[4000100], r[4000100];
node join(node a, node b){
    node c;
    c.a = min(a.a,b.a);
    c.b = max(a.b,b.b);
    c.c = min(a.c,b.c);
    c.d = max(a.d,b.d);
    return c;
}
void build(int i, int rl, int rr) {
    l[i] = rl, r[i] = rr;
    if(rl!=rr)
        build(i*2,rl,rr+rl>>1),build(i*2+1,rl+rr+2>>1, rr);
}
void upd(int i, int pos, int x, int y) {
    if(l[i]==r[i])
        return(void) (val[i].a=val[i].b=x,val[i].c=val[i].d=y);
    if(pos>r[i*2])
        upd(i*2+1,pos,x,y);
    else upd(i*2,pos,x,y);
    val[i]=join(val[i*2],val[i*2+1]);
}
node query(int i, int x, int y) {
    if(x<=l[i]&&r[i]<=y)
        return val[i];
    if(x>r[i]||l[i]>y)
        return (node){1000000,0,1000000,0};
    return join(query(i*2,x,y),query(i*2+1,x,y));
}
void give_initial_chart(int H, int W, vector<int> R, vector<int> C) {
    build(1,1,H*W);
    for(int i = 0; i < r[1]; i++) {
        upd(1,i+1,R[i],C[i]);
    }
}
int swap_seats(int a, int b) {
    a++,b++;
    node x = query(1,a,a), y = query(1,b,b);
    upd(1,b,x.a,x.c);
    upd(1,a,y.a,y.c);
    int ans = 0;
    for(int i = 1; i <= r[1]; i++) {
        x=query(1,1,i);
        int sz = (x.b-x.a+1)*(x.d-x.c+1);
        if(sz==i) ans++;
        else i = max(i,sz-1);
    }
    return ans;
}

Compilation message (stderr)

seats.cpp: In function 'void build(int, int, int)':
seats.cpp:20:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   20 |         build(i*2,rl,rr+rl>>1),build(i*2+1,rl+rr+2>>1, rr);
      |                      ~~^~~
seats.cpp:20:49: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   20 |         build(i*2,rl,rr+rl>>1),build(i*2+1,rl+rr+2>>1, rr);
      |                                            ~~~~~^~
#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...