提出 #72198169


ソースコード 拡げる

#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops,fast-math")
using namespace std;
typedef long long ll;
const int mod=1000000007;
int n,t,b[1000010];
pair<int,int> a[1000010];
struct Node {
    int val,cnt;
    Node() {
        val=0; cnt=0;
    }
    Node(int v, int c) {
        val=v; cnt=c;
    }
};
Node tree[2000001];
Node merge(Node a, Node b) {
    if(a.val>b.val) return a;
    if(a.val<b.val) return b;
    return Node(a.val, (a.cnt+b.cnt)%mod);
}
void init() {
    for(int i=n-1;i;i--) tree[i]=merge(tree[i<<1],tree[i<<1^1]);
}
Node sum(int l, int r) {
    if(l>r) return {0,1};
    Node ret; l+=n-1; r+=n-1;
    for(;l<=r;l>>=1,r>>=1) {
        if(l&1) ret=merge(tree[l++],ret); if(~r&1) ret=merge(ret,tree[r--]);
    }
    return ret;
}
void upd(int ind, Node val) {
    ind+=n-1; tree[ind]=val;
    for(;ind;ind>>=1) tree[ind>>1]=merge(tree[ind],tree[ind^1]);
}
int x,y;
pair<int,int> pa[202020];
queue<pair<int,Node>> updq;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    for(int i=1;i<=n;i++) {
        cin >> x >> y;
        pa[i]={x,y};
    }
    sort(pa+1,pa+1+n);
    for(int i=1;i<=n;i++) {
        a[i]={pa[i].second,i}; b[i]=pa[i].second;
    }
    sort(a+1, a+1+n);
    vector<int> q(n+1);
    for(int i=1;i<=n;i++) q[a[i].second]=i;
    updq.push({q[1],{1,1}});
    for(int i=2;i<=n;i++) {
        if(pa[i].first!=pa[i-1].first) {
            while(!updq.empty()) {
                auto j=updq.front(); updq.pop();
                upd(j.first,j.second);
            }
        }
        int yes=0,no=q[i],mid=(yes+no)/2;
        while(yes+1<no) {
            if(a[mid].first<b[i]) yes=mid;
            else no=mid;
            mid=(yes+no)/2;
        }
        auto res=sum(1,yes);
        if(!res.val && !res.cnt) res.cnt=1;
        updq.push({q[i],{res.val+1, res.cnt}});
        //upd(q[i],{res.val+1, res.cnt});
    }
    while(!updq.empty()) {
        auto j=updq.front(); updq.pop();
        upd(j.first,j.second);
    }
    auto res=sum(1,n);
    cout << res.val;
}

提出情報

提出日時
問題 E - Kite
ユーザ Hakuaa_2
言語 C++23 (GCC 15.2.0)
得点 450
コード長 2122 Byte
結果 AC
実行時間 95 ms
メモリ 26056 KiB

コンパイルエラー

./Main.cpp: In function 'Node sum(int, int)':
./Main.cpp:30:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   30 |         if(l&1) ret=merge(tree[l++],ret); if(~r&1) ret=merge(ret,tree[r--]);
      |         ^~
./Main.cpp:30:43: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   30 |         if(l&1) ret=merge(tree[l++],ret); if(~r&1) ret=merge(ret,tree[r--]);
      |                                           ^~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 450 / 450
結果
AC × 3
AC × 24
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_1_00.txt, 01_random_1_01.txt, 01_random_1_02.txt, 01_random_1_03.txt, 01_random_1_04.txt, 01_random_1_05.txt, 02_random_2_00.txt, 02_random_2_01.txt, 02_random_2_02.txt, 02_random_2_03.txt, 02_random_2_04.txt, 02_random_2_05.txt, 03_sorted_00.txt, 03_sorted_01.txt, 03_sorted_02.txt, 03_sorted_03.txt, 03_sorted_04.txt, 03_sorted_05.txt, 04_same_coord_00.txt, 04_same_coord_01.txt, 04_same_coord_02.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 7 ms 19328 KiB
00_sample_01.txt AC 7 ms 19184 KiB
00_sample_02.txt AC 6 ms 19384 KiB
01_random_1_00.txt AC 57 ms 21696 KiB
01_random_1_01.txt AC 95 ms 23624 KiB
01_random_1_02.txt AC 78 ms 22888 KiB
01_random_1_03.txt AC 94 ms 23624 KiB
01_random_1_04.txt AC 93 ms 23656 KiB
01_random_1_05.txt AC 94 ms 23660 KiB
02_random_2_00.txt AC 58 ms 23660 KiB
02_random_2_01.txt AC 60 ms 23612 KiB
02_random_2_02.txt AC 64 ms 23732 KiB
02_random_2_03.txt AC 67 ms 23604 KiB
02_random_2_04.txt AC 67 ms 23636 KiB
02_random_2_05.txt AC 75 ms 23632 KiB
03_sorted_00.txt AC 57 ms 23632 KiB
03_sorted_01.txt AC 74 ms 23548 KiB
03_sorted_02.txt AC 59 ms 23632 KiB
03_sorted_03.txt AC 58 ms 23656 KiB
03_sorted_04.txt AC 73 ms 23612 KiB
03_sorted_05.txt AC 57 ms 23596 KiB
04_same_coord_00.txt AC 72 ms 26056 KiB
04_same_coord_01.txt AC 59 ms 23616 KiB
04_same_coord_02.txt AC 46 ms 26044 KiB