Submission #1271137

#TimeUsernameProblemLanguageResultExecution timeMemory
1271137quan606303Examination (JOI19_examination)C++20
0 / 100
1 ms324 KiB
#include <bits/stdc++.h>
#define int long long
#define ll long long
#define fi first
#define se second
#define endl '\n'
#define memfull(a,b) memset(a,b,sizeof(a));
#define file(a) freopen(a".inp","r",stdin); freopen(a".out","w",stdout);
using namespace std;
const int MOD=1e9+7;
const int maxn=1e5+7;
struct node
{
    int X,Y,Z,id;
};
vector<node> a;
node buctranh[maxn];
node giamkhao[maxn];
int ans[maxn];
int n,q;
namespace sub1{
    bool check()
    {
        return (n<=3e3&&q<=3e3);
    }
    void solve()
    {
        for (int i=1;i<=q;i++)
        {
            int ans=0;
            for (int j=1;j<=n;j++)
            {
                if (giamkhao[i].X<=buctranh[j].X&&giamkhao[i].Y<=buctranh[j].Y&&giamkhao[i].Z<=buctranh[j].Z)ans++;
            }
            cout<<ans<<endl;
        }
    }
}
namespace sub2
{
    bool check()
    {
        for (int i=1;i<=q;i++)if (giamkhao[i].Z!=0||giamkhao[i].X>1e5||giamkhao[i].Y>1e5)return false;
        for (int i=1;i<=n;i++)if (buctranh[i].X>1e5||buctranh[i].Y>1e5)return false;
        return true;
    }
    bool cmp(node u,node v)
    {
        if (u.X!=v.X)return u.X>v.X;
        return u.id<v.id;
    }
    struct BIT
    {
        int N;
        vector<int> bit;
        BIT(int n):N(n),bit(n+5,0){}
        void upd(int x,int val)
        {
            for (;x<=N;x+=(x&-x))bit[x]+=val;
        }
        int get(int x)
        {
            int sum=0;
            for (;x>0;x&=(x-1))sum+=bit[x];
            return sum;
        }
        int get_range(int l,int r)
        {
            return get(r)-get(l-1);
        }
    };
    void solve()
    {
        sort(a.begin(),a.end(),cmp);
        BIT bit(maxn);
        for (auto i:a)
        {
            if (i.id==-1)bit.upd(i.Y,1);
            else ans[i.id]=bit.get_range(i.Y,maxn);
        }
        for (int i=1;i<=q;i++)cout<<ans[i]<<endl;
    }
}
namespace sub34
{
  struct ST
  {
    int N;
    vector<vector<int> > st;
    ST(int n):N(n),st(4*n+5,vector<int>(0)){}
    vector<int> Merge(const vector<int> &L,const vector<int> &R)
    {
        vector<int> vt;
        int i=0,j=0;
        while (i<(int)L.size()&&j<(int)R.size())
        {
            if (L[i]<=R[j])
            {
                vt.push_back(L[i]);
                i++;
            }
            else
            {
                vt.push_back(R[j]);
                j++;
            }
        }
        while (i<(int)L.size())
        {
            vt.push_back(L[i]);
            i++;
        }
        while (j<(int)R.size())
        {
            vt.push_back(R[j]);
            j++;
        }
        return vt;
    }
    int cal(const vector<int> &vt,int val)
    {
        return vt.size()-(lower_bound(vt.begin(),vt.end(),val)-vt.begin());
    }
    void upd(int id,int l,int r,int pos,int val)
    {
        if (l>pos||r<pos)return ;
        if (l==r)
        {
            st[id]=Merge(st[id],{val});
            return ;
        }
        int mid=(l+r)/2;
        upd(id*2,l,mid,pos,val);
        upd(id*2+1,mid+1,r,pos,val);
        st[id]=Merge(st[id*2],st[id*2+1]);
    }
    int get(int id,int l,int r,int u,int v,int val)
    {
        if (l>v||r<u)return 0;
        if (l>=u&&r<=v)return max(0LL,cal(st[id],val));
        int mid=(l+r)/2;
        return get(id*2,l,mid,u,v,val)+get(id*2+1,mid+1,r,u,v,val);
    }
  };
  bool cmp(node u,node v)
{
    if (u.X!=v.X)return u.X>v.X;
    return u.id<v.id;
}
  void solve()
  {
      vector<int> nen1,nen2,nen3;
      nen1.push_back(-1e18);
      nen2.push_back(-1e18);
      nen3.push_back(-1e18);
      for (auto i:a)
      {
          nen1.push_back(i.X);
          nen2.push_back(i.Y);
          nen3.push_back(i.Z);
      }
      sort(nen1.begin(),nen1.end());
      sort(nen2.begin(),nen2.end());
      sort(nen3.begin(),nen3.end());
      nen1.erase(unique(nen1.begin(),nen1.end()),nen1.end());
      nen2.erase(unique(nen2.begin(),nen2.end()),nen2.end());
      nen3.erase(unique(nen3.begin(),nen3.end()),nen3.end());
      for (auto &i:a)
      {
        i.X=lower_bound(nen1.begin(),nen1.end(),i.X)-nen1.begin();
        i.Y=lower_bound(nen2.begin(),nen2.end(),i.Y)-nen2.begin();
        i.Z=lower_bound(nen3.begin(),nen3.end(),i.Z)-nen3.begin();
      }
      sort(a.begin(),a.end(),cmp);
      int sz_X=(int)nen1.size();
      int sz_Y=(int)nen2.size();
      int sz_Z=(int)nen3.size();
      ST st(sz_Y);
      for (auto i:a)
      {
          if (i.id==-1)st.upd(1,1,sz_Y,i.Y,i.Z);
          else ans[i.id]=st.get(1,1,sz_Y,i.Y,sz_Y,i.Z);
      }
      for (int i=1;i<=q;i++)cout<<ans[i]<<endl;
  }
};
int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    file("ANHDEP");
    cin>>n>>q;
    for (int i=1;i<=n;i++)
    {
        int x,y;
        cin>>x>>y;
        a.push_back({x,y,x+y,-1});
        buctranh[i]={x,y,x+y,-1};
    }
    for (int i=1;i<=q;i++)
    {
        int x,y,z;
        cin>>x>>y>>z;
        a.push_back({x,y,z,i});
        giamkhao[i]={x,y,z,i};
    }
    if (sub1::check())sub1::solve();
    else if (sub2::check())sub2::solve();
    return 0;
}

Compilation message (stderr)

examination.cpp: In function 'int32_t main()':
examination.cpp:8:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    8 | #define file(a) freopen(a".inp","r",stdin); freopen(a".out","w",stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~
examination.cpp:192:5: note: in expansion of macro 'file'
  192 |     file("ANHDEP");
      |     ^~~~
examination.cpp:8:52: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    8 | #define file(a) freopen(a".inp","r",stdin); freopen(a".out","w",stdout);
      |                                             ~~~~~~~^~~~~~~~~~~~~~~~~~~~
examination.cpp:192:5: note: in expansion of macro 'file'
  192 |     file("ANHDEP");
      |     ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...