求助!暴力 map 套 set 做法 wa#6!
查看原帖
求助!暴力 map 套 set 做法 wa#6!
632236
gan1234楼主2023/8/26 22:27
#include<bits/stdc++.h>
#define int long long
#define P(x,y) ((x)*(1ll<<31)+(y))
using namespace std;
struct Node{
    int x,y,z,u,v;
}a[100005];
struct Q{
    int v,x,y;
}q[300005];
int cnt;
multiset<int>s[300005],s2[300005];
int tag[300005];
int n,T;
map<int,int>ma;
void update(int t){
    set<int>::iterator it;
    it=s2[t].begin();
    int len=s[t].size();
    if(len==1||len==0)return ;
    while(it!=s2[t].end()){
        s[t].erase(a[*it].z);
        a[*it].u=max(a[*it].u,len-1);a[*it].v=max(a[*it].v,(int)*(--s[t].end()));
        s[t].insert(a[*it].z);
        it++;
    }
}
signed main(){
    ios::sync_with_stdio(0);
    cin>>n;
    for(int i=1;n>=i;i++){
        cin>>a[i].z>>a[i].x>>a[i].y;
        int t=ma[P(a[i].x,a[i].y)];
        if(!t){
            t=++cnt;
            ma[P(a[i].x,a[i].y)]=t;
        }
        s[t].insert(a[i].z);s2[t].insert(i);
    }
    for(int i=1;n>=i;i++){
        int t=ma[P(a[i].x,a[i].y)];
        s[t].erase(a[i].z);
        if(s[t].empty()){
            s[t].insert(a[i].z);
            continue;
        }
        a[i].u=s[t].size();
        a[i].v=*--s[t].end();
        s[t].insert(a[i].z);
    }
    cin>>T;
    int v,x,y;
    for(int i=1;T>=i;i++)cin>>q[i].v>>q[i].x>>q[i].y;
    for(int i=1;T>=i;i++){
        v=q[i].v;x=q[i].x;y=q[i].y;
        int t=ma[P(a[v].x,a[v].y)];
        if(tag[t]){
            update(t);
            tag[t]=0;
        }
        s[t].erase(a[v].z);s2[t].erase(v);
        if(s[t].empty())
            ma[P(a[v].x,a[v].y)]=0;
        t=ma[P(x,y)];
        a[v].x=x;a[v].y=y;
        if(s[t].empty())t=0;
        if(t){
            a[v].u=max(a[v].u,(int)s[t].size());
            a[v].v=max(a[v].v,(int)*--s[t].end());
        }else{
            t=++cnt;
            ma[P(x,y)]=t;
        }
        s[t].insert(a[v].z);
        s2[t].insert(v);
        tag[t]=1;
    }
    for(int i=1;n>=i;i++){
        update(ma[P(a[i].x,a[i].y)]);
        cout<<a[i].u*a[i].v<<endl;
    }
    return 0;
}
2023/8/26 22:27
加载中...