답안 #799145

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
799145 2023-07-31T10:10:17 Z bane Watering can (POI13_kon) C++17
50 / 100
4000 ms 10780 KB
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#define ll long long
const int nax = 300'001;
int sq = 500;
ll N, K, t[nax], zers[nax];
 
vector<ll>SQE[nax / 500 + 5];
vector<ll>ps[nax / 500 + 5];
 
 
void inicjuj(int n, int k, int *D)
{
        
        sq = (int)sqrt(n) + 1;
       for (int i = 0; i < n; i++)
       {  
            t[i] = D[i];
            SQE[i / sq].push_back(t[i]);
        }
        N = n, K = k;
 
        for (int i = 0; i <= n / sq; i++){
            ps[i].resize(SQE[i].size());
            sort(SQE[i].begin(), SQE[i].end());
            SQE[i].erase(unique(SQE[i].begin(),SQE[i].end()),SQE[i].end());
            for (int j = i * sq; j < n && j /sq == i; j++){
                int pos = lower_bound(SQE[i].begin(), SQE[i].end(), t[j]) - SQE[i].begin();
                ps[i][pos]++;
            }
            for (int j = ps[i].size() - 2; j >= 0; j--){
                ps[i][j] += ps[i][j + 1];
            }
        }
}
 
void podlej(int a, int b)
{
    //--a,--b;
    for (int i = a / sq; i * sq <=  b; i++){
       // cout << i << endl;
        if (a <= i * sq && b >= (i + 1) * sq - 1){
            zers[i]++;
        }else{
            SQE[i].clear();
            for (int j = i*sq; j / sq == i && j < N; j++){
                t[j]+=zers[i];
                if (j >= a && j <= b)t[j]++;
                SQE[i].push_back(t[j]);
               // t[j]++;
            }
            zers[i] = 0;
            sort(SQE[i].begin(), SQE[i].end());
            SQE[i].erase(unique(SQE[i].begin(),SQE[i].end()),SQE[i].end());
            ps[i].clear();
            ps[i].resize(SQE[i].size());
            for (int j = i*sq; j / sq == i && j < N; j++){
                int pos = lower_bound(SQE[i].begin(), SQE[i].end(), t[j]) - SQE[i].begin();
                ps[i][pos]++;
            } 
            for (int j = ps[i].size() - 2; j >= 0; j--){
                ps[i][j] += ps[i][j + 1];
            }
        }
    }
}
 
int dojrzale(int a, int b)
{
   // --a,--b;
    int ans = 0;
    
   
    for (int i = a / sq; i <= b / sq; i++){
        if (a <= i * sq && b >= (i + 1) * sq - 1){
            int pos = lower_bound(SQE[i].begin(), SQE[i].end(), K - zers[i]) - SQE[i].begin();
            if (pos < SQE[i].size())ans += ps[i][pos];
        }else{
           for (int j = max(a, i * sq); j / sq == i && j <= b; j++){
                if (t[j] + zers[i] >= K)++ans;
           }
        }
    } 
    return ans;
}

Compilation message

kon.cpp: In function 'int dojrzale(int, int)':
kon.cpp:79:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |             if (pos < SQE[i].size())ans += ps[i][pos];
      |                 ~~~~^~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1492 KB Output is correct
2 Correct 1 ms 1492 KB Output is correct
3 Correct 1 ms 1492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1492 KB Output is correct
2 Correct 7 ms 1552 KB Output is correct
3 Correct 1 ms 1492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 627 ms 2444 KB Output is correct
2 Correct 660 ms 2240 KB Output is correct
3 Correct 177 ms 2252 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 933 ms 2716 KB Output is correct
2 Correct 2094 ms 2656 KB Output is correct
3 Correct 458 ms 2716 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2044 ms 4416 KB Output is correct
2 Correct 1146 ms 4204 KB Output is correct
3 Correct 635 ms 3420 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4034 ms 4684 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4065 ms 5488 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4058 ms 6772 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4067 ms 10780 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4080 ms 10476 KB Time limit exceeded
2 Halted 0 ms 0 KB -