求分析 G 题时间复杂度
  • 板块学术版
  • 楼主1234567890sjx
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/3 22:45
  • 上次更新2024/8/4 09:25:53
查看原帖
求分析 G 题时间复杂度
1013955
1234567890sjx楼主2024/8/3 22:45

rt,已经通过。

#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
const int N=200100;
int t[N],p[N],a[N],b[N];
int on[N];
vector<pair<int,int>>z[N];
signed main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;++i){
        int t,p;cin>>t>>p;
        if(!on[p])on[p]=t;
        else z[p].emplace_back(t,on[p]),on[p]=0;
    }
    for(int i=1;i<=n;++i)
        sort(z[i].begin(),z[i].end());
    int q;cin>>q;
    map<pair<int,int>,int>mp;
    while(q--){
        int l,r,res=0;cin>>l>>r;
        if(mp[{l,r}])cout<<mp[{l,r}]<<'\n';
        else{
            for(int i=0;i<z[r].size();++i)
            for(int j=z[l].size()-1;~j;--j){
                auto[r1,l1]=z[l][j];
                auto[r2,l2]=z[r][i];
                if(max(l1,l2)<=min(r1,r2))res+=min(r1,r2)-max(l1,l2);
                else if(r1<l2)break;
            }
            cout<<(mp[{l,r}]=res)<<'\n';
        }
    }
    return 0;
}
2024/8/3 22:45
加载中...