답안 #779470

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
779470 2023-07-11T13:04:55 Z sofija6 Examination (JOI19_examination) C++14
2 / 100
3000 ms 20100 KB
#include <bits/stdc++.h>
#define ll long long
#define MAXN 100010
using namespace std;
pair<ll,ll> a[MAXN],b[MAXN];
set<ll> sums;
map<ll,ll> comp;
ll n,q,x[MAXN],y[MAXN],z[MAXN],len,cntind[MAXN],ans[MAXN],sumab[MAXN];
bool Cmp(pair<ll,ll> p1,pair<ll,ll> p2)
{
    return p1.first>p2.first;
}
ll Find_Pos(ll x,pair<ll,ll> *p)
{
    ll l=1,r=n,mid,ans=0;
    while (l<=r)
    {
        mid=(l+r)/2;
        if (p[mid].first>=x)
        {
            ans=mid;
            l=mid+1;
        }
        else
            r=mid-1;
    }
    return ans;
}
struct bit
{
    vector<ll> sum;
    void Init()
    {
        sum.resize(2*MAXN);
    }
    void Add(ll pos,ll val)
    {
        for (ll i=pos;i<2*MAXN;i+=i&(-i))
            sum[i]+=val;
    }
    ll Calc(ll pos)
    {
        ll ans=0;
        for (ll i=pos;i>0;i-=i&(-i))
            ans+=sum[i];
        return ans;
    }
    ll Query(ll l,ll r)
    {
        return Calc(r)-Calc(l-1);
    }
};
bit B;
struct query
{
    ll l,r,ind;
};
query qq[MAXN];
bool Cmp_Query(query q1,query q2)
{
    if (q1.l/len!=q2.l/len)
        return q1.l/len<q2.l/len;
    return q1.r/len<q2.r/len;
}
void Add(ll pos,pair<ll,ll> *p)
{
    ll i=p[pos].second;
    cntind[i]++;
    if (cntind[i]==2)
        B.Add(comp[sumab[i]],1);
}
void Remove(ll pos,pair<ll,ll> *p)
{
    ll i=p[pos].second;
    cntind[i]--;
    if (cntind[i]==1)
        B.Add(comp[sumab[i]],-1);
}
int main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin >> n >> q;
    len=sqrt(n);
    for (ll i=1;i<=n;i++)
    {
        cin >> a[i].first >> b[i].first;
        a[i].second=b[i].second=i;
        sumab[i]=a[i].first+b[i].first;
        sums.insert(sumab[i]);
    }
    sort(a+1,a+1+n,Cmp);
    sort(b+1,b+1+n,Cmp);
    for (ll i=1;i<=q;i++)
    {
        cin >> x[i] >> y[i] >> z[i];
        sums.insert(z[i]);
    }
    ll cnt=1;
    for (auto i : sums)
        comp[i]=cnt++;
    for (ll i=1;i<=q;i++)
    {
        qq[i].l=Find_Pos(x[i],a);
        qq[i].r=Find_Pos(y[i],b);
        qq[i].ind=i;
    }
    sort(qq+1,qq+1+q,Cmp_Query);
    ll curl=0,curr=0;
    B.Init();
    for (ll i=1;i<=q;i++)
    {
        while (curl<qq[i].l)
        {
            curl++;
            Add(curl,a);
        }
        while (curr<qq[i].r)
        {
            curr++;
            Add(curr,b);
        }
        while (curl>qq[i].l)
        {
            Remove(curl,a);
            curl--;
        }
        while (curr>qq[i].r)
        {
            Remove(curr,b);
            curr--;
        }
        ans[qq[i].ind]=B.Query(comp[z[qq[i].ind]],2*MAXN-1);
    }
    for (ll i=1;i<=q;i++)
        cout << ans[i] << "\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1876 KB Output is correct
2 Correct 1 ms 1876 KB Output is correct
3 Correct 1 ms 1876 KB Output is correct
4 Correct 1 ms 1876 KB Output is correct
5 Correct 1 ms 1876 KB Output is correct
6 Correct 1 ms 1876 KB Output is correct
7 Correct 28 ms 2904 KB Output is correct
8 Correct 28 ms 2896 KB Output is correct
9 Correct 28 ms 2908 KB Output is correct
10 Correct 28 ms 2904 KB Output is correct
11 Correct 10 ms 2900 KB Output is correct
12 Correct 6 ms 2252 KB Output is correct
13 Correct 24 ms 2516 KB Output is correct
14 Correct 25 ms 2576 KB Output is correct
15 Correct 25 ms 2516 KB Output is correct
16 Correct 6 ms 2580 KB Output is correct
17 Correct 27 ms 2900 KB Output is correct
18 Correct 3 ms 2132 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3061 ms 20100 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3061 ms 20100 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1876 KB Output is correct
2 Correct 1 ms 1876 KB Output is correct
3 Correct 1 ms 1876 KB Output is correct
4 Correct 1 ms 1876 KB Output is correct
5 Correct 1 ms 1876 KB Output is correct
6 Correct 1 ms 1876 KB Output is correct
7 Correct 28 ms 2904 KB Output is correct
8 Correct 28 ms 2896 KB Output is correct
9 Correct 28 ms 2908 KB Output is correct
10 Correct 28 ms 2904 KB Output is correct
11 Correct 10 ms 2900 KB Output is correct
12 Correct 6 ms 2252 KB Output is correct
13 Correct 24 ms 2516 KB Output is correct
14 Correct 25 ms 2576 KB Output is correct
15 Correct 25 ms 2516 KB Output is correct
16 Correct 6 ms 2580 KB Output is correct
17 Correct 27 ms 2900 KB Output is correct
18 Correct 3 ms 2132 KB Output is correct
19 Execution timed out 3061 ms 20100 KB Time limit exceeded
20 Halted 0 ms 0 KB -